我的一些模型有一个名为" company_id"。
的列我需要这些模型中的所有查询都有一个基于此列的条件,因此我可以轻松地将公司行分开。
这样的事情:
Customer.where(state: x).`where(company_id: current_company)`...
如何拦截此方法以强制执行此额外条件?
答案 0 :(得分:1)
我建议使用关注点将此要求作为默认范围添加到所有模型中。
module HasCompany
extend ActiveSupport::Concern
included do
default_scope { where(company_id: current_company) }
end
end
class Customer < ActiveRecord::Base
include HasCompany
...
end
注意:只有在模型上可以访问current_company
作为类方法时,此方法才有效。
答案 1 :(得分:0)
此代码在哪里?它看起来像控制器逻辑?如果它在控制器中,那么您可以在应用程序控制器中的current_company
中设置before_action
- 可能就像您已经在做的那样。假设您在公司和客户之间存在has_many
关系,您应该current_company.customers.where(state: x)
。
如果此代码存在于模型中,那就是事情变得棘手的时候。您不应该在模型中访问current_company
,因为它处理当前请求。