我知道可以在Rails模型中创建default_scope来限制选择。但这可以/将被无范围调用覆盖。
不管Rails的作用域方法如何,是否都有可能默认应用一个范围?初始化方法可以做些什么?
最佳答案
是的,您可以猴子修补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
方法并编写必要的测试以确保关系不受限制。关于ruby-on-rails - Rails强制范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21324161/