我在Rails用户模型中有一个作用域(此作用域正在使用每个模型):
scope :only_sample, -> { only_sample_items }
而“ only_sample_items”方法是:
return where("sample_id IS NULL OR sample_id NOT IN (?) OR sample_id IN (?)", inactive_sample_ids, active_sample_ids)
当我使用Projects表将User加入并出现此错误时。我知道在用户表和项目表中都存在sample_id。这引起了歧义。
谁能告诉我避免该错误的方法,如何修改'only_sample_items'方法?
最终,我使用Arel摆脱了歧义。
我将查询更改如下:
item_table = klass.arel_table # klass be User, Project etc
where(item_table[:sample_id].eq(nil).or(item_table[:sample_id].not_in inactive_sample_ids).or(item_table[:sample_id].in active_sample_ids))
现在实际上发生了什么,Arel通过根据我调用范围的模型添加table_name.coulmn名称本身来处理查询。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句