将范围应用于活动记录关系将永久修改关系。为什么呢?
company_purchases.to_sql
=> "SELECT \"purchases\".* FROM \"purchases\" WHERE \"purchases\".\"company_id\" = 17"
company_purchases.by_state("finalized").to_sql
=> "SELECT \"purchases\".* FROM \"purchases\" WHERE \"purchases\".\"company_id\" = 17 AND \"purchases\".\"state\" = 'finalized'"
company_purchases.to_sql
=> "SELECT \"purchases\".* FROM \"purchases\" WHERE \"purchases\".\"company_id\" = 17 AND \"purchases\".\"state\" = 'finalized'"
我希望在调用作用域时SQL看起来有所不同,但是我不明白为什么在没有作用域的情况下下一次调用where
时作用域中的附加company_purchases
仍然存在。
范围定义
scope :by_state, ->(state) { where(state: state) }
更新
这似乎是宝石八达通的一个错误,请参见此处:https://github.com/thiagopradi/octopus/issues/455
对于其他情况,由于company_purchases的组成方式,正在引入八达通错误。
company_purchases = company.purchases
# in Company model
def purchases
Product.using(shard).where(company_id: id)
end
答案 0 :(得分:0)
如果您default_scope
,则会显示在您在该模型上进行的每个查询中。而是使用scope
来避免上述问题。
答案 1 :(得分:0)
这似乎是Octopus的一个问题,而不是Active Record范围或关系。