我在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)
当我加入User with Projects表并收到此错误时。我知道sample_id在用户和项目表中都有。这导致了歧义。
有人可以告诉我避免此错误如何修改'only_sample_items'方法?
答案 0 :(得分:3)
由于您在用户和项目中都有样本ID,这就是为什么存在歧义问题的原因。
我认为以下代码可以帮助您:
return where("users.sample_id IS NULL OR users.sample_id NOT IN (?)", inactive_sample_ids)
或
return where("projects.sample_id IS NULL OR projects.sample_id NOT IN (?)", inactive_sample_ids)
答案 1 :(得分:1)
最后,我设法通过使用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名称来处理查询。