Rails postgres错误:ActiveRecord :: StatementInvalid异常:PG :: AmbiguousColumn:错误:列引用“sample_id”不明确

时间:2015-05-20 09:53:50

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 activerecord

我在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'方法?

2 个答案:

答案 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名称来处理查询。