从一系列ID中获取所有Rails记录

时间:2014-09-22 20:39:20

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

我有一组记录ID ["303", "430", "4321", "5102"]。我想使用SQL获取与这些ID匹配的所有记录:

acceptable_ids = ["303", "430", "4321", "5102"]
@users = User.where("is_awesome = true AND id IN acceptable_ids)

给出了这个错误:

ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR:  syntax error at or near "["

编写查询以获取所有匹配acceptable_ids的ID的用户的正确方法是什么?

注意:

我知道User.find(acceptable_ids),但由于我使用select,where和join子句构建SQL查询,所以无法使用它。

2 个答案:

答案 0 :(得分:8)

User.where(is_awesome: true, id: acceptable_ids)

答案 1 :(得分:-3)

你可以这样做。

@users = User.where("is_awesome = true AND id IN (#{acceptable_ids.join(', ')})")

我确定我已经看到了一种更简单的方式,但目前无法回想起......但上面应该有效。

编辑

但是,你可以从喧嚣的评论中看出这不是一个流行的答案,所以你应该看看链接和列出的一些替代方案,例如。

# Will raise exception if any value not found
User.find( [1,3,5] )

# Will not raise an exception
User.find_all_by_id( [1,3,5] )