我有一个模型需要添加一个属性来判断它是否处于活动状态,例如一个名为 disabled 的布尔值,可以设置为 true。我已经有一个很大的代码库,我不想在unless disabled == false
每个查询中添加一个条件。
是否有某种前置过滤器可以在每个查询之前运行以检查此属性?
我有一个模型需要添加一个属性来判断它是否处于活动状态,例如一个名为 disabled 的布尔值,可以设置为 true。我已经有一个很大的代码库,我不想在unless disabled == false
每个查询中添加一个条件。
是否有某种前置过滤器可以在每个查询之前运行以检查此属性?
您可以使用 ActiveRecord default_scope 语句。它会将您定义的范围连接到通过模型完成的每个查询。
class MyModel < ActiveRecord::Base
default_scope where(:disabled => false)
end
现在运行这个:
MyModel.all
生成:
# => SELECT * FROM my_models WHERE disabled =false
它的完整文档可以在这里找到。我还在我的博客中发表了关于该主题的帖子。我建议在应用之前先了解有关 default_scope 的一些很好的见解。