0

我有一个模型需要添加一个属性来判断它是否处于活动状态,例如一个名为 disabled 的布尔值,可以设置为 true。我已经有一个很大的代码库,我不想在unless disabled == false每个查询中添加一个条件。

是否有某种前置过滤器可以在每个查询之前运行以检查此属性?

4

1 回答 1

2

您可以使用 ActiveRecord default_scope 语句。它会将您定义的范围连接到通过模型完成的每个查询。

class MyModel < ActiveRecord::Base
  default_scope where(:disabled => false)
end

现在运行这个:

MyModel.all

生成:

# => SELECT * FROM my_models WHERE disabled =false

它的完整文档可以在这里找到。我还在我的博客中发表了关于该主题的帖子。我建议在应用之前先了解有关 default_scope 的一些很好的见解。

于 2012-08-09T20:42:49.143 回答