我知道可以在Rails模型中创建default_scope来限制选择。但这可以/将被一个没有范围的电话覆盖。
是否可以使用默认应用的作用域,而不管Rails作用域方法如何?可以使用initialize方法完成的事情吗?
答案 0 :(得分:2)
是的,你可以修补ActiveRecord :: Base方法。
请参阅未范围的方法:
def unscoped #:nodoc:
block_given? ? relation.scoping { yield } : relation
end
你应该使用补丁#relation方法来包含你的默认范围。
将以下文件放在config/initializers
目录中:
module ActiveRecord
class Base
def relation
base_relation = super
base_relation.where(#default conditions)
end
end
end
您也可以使用ActiveSupport :: Concern,这可能是首选方式,我只想指出您应该扩展#relation
方法。无论您扩展ActiveRecord的方式是什么,我的建议是您应该坚持使用#default_scope
方法并编写必要的测试以确保关系不是未绑定的。