gpt4 book ai didi

ruby-on-rails - Rails 强制范围

转载 作者:行者123 更新时间:2023-12-04 06:16:48 24 4
gpt4 key购买 nike

我知道可以在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com