Sql 在Rails中ActiveRecord模型中的何处强制
有没有办法强制在我使用活动记录执行的每个SELECT语句中包含where语句?我使用的是Rails 4 例如: 如果我打电话:Sql 在Rails中ActiveRecord模型中的何处强制,sql,ruby-on-rails,activerecord,where,default-scope,Sql,Ruby On Rails,Activerecord,Where,Default Scope,有没有办法强制在我使用活动记录执行的每个SELECT语句中包含where语句?我使用的是Rails 4 例如: 如果我打电话: Product.where(name: 'Fishing rod') 然后,我希望Rails生成如下所示的SQL查询: SELECT * FROM products WHERE products.client_id = 1 AND (name = 'Fishing rod') 其中products.client_id=1是强制的where语句。我通过where或其他
Product.where(name: 'Fishing rod')
然后,我希望Rails生成如下所示的SQL查询:
SELECT * FROM products WHERE products.client_id = 1 AND (name = 'Fishing rod')
其中products.client_id=1
是强制的where语句。我通过where或其他ORM方法定义的所有其他条件(如find
或其他任何方法)也应包含在语句中
是否有可能定义这种强制条件?您可以使用
在您的模型中
default_scope { where(client_id: 1) }
根据文件
在创建/构建记录时,也会应用默认的_范围。信息技术
更新记录时不应用
因此,我建议您使用更显式的方法,并像这样定义一个命名范围
scope :client_one, -> { where(client_id: 1) }
你会用这个吗
Product.client_one.where(...)
非常感谢,
default\u scope
正是我想要的。在创建和初始化时设置client\u id
并不是一个缺点,它为我节省了一些代码,就像我第一次想做的那样,在保存后添加
过滤器。