我正在使用 Rails 3 和 sqlite 数据库。 使用 IN 查询。 当前将项目的字符串变量传递给 IN 查询。 但是在执行该查询时它需要 '' 所以它不起作用。 如何克服这种情况?
这是我的代码
items = ""
items << "#{@invitation_user1.id}" << "," << "#{@invitation_user2.id}" << "," << "#{@user1.id}" << "," << "#{@user2.id}" << "," << "#{@user2.id}" << "," << "#{@profile1.id}" << "," << "#{@profile2.id}"
@activities = Version.where("item_id IN (?)","#{items}")
尝试了 items.to_i、items.to_s 但没有用。 在日志中我可以看到这个。
SELECT "versions".* FROM "versions" WHERE (item_id IN ('19,20,4,1,1,4,1'))
但我只需要
SELECT "versions".* FROM "versions" WHERE (item_id IN (19,20,4,1,1,4,1))
最佳答案
你可以传入一个数组。Rails 足够聪明,可以用它做正确的事情:
items = [
@invitation_user1.id,
@invitation_user2.id,
@user1.id,
@user2.id,
@profile1.id,
@profile2.id
]
@activities = Version.where("item_id IN (?)", items)
# or equivalently:
@activities = Version.where(:item_id => items)
这比您的变体更受青睐,因为 Rails 会正确处理所用数据库适配器的所有传递值的转义。
关于ruby-on-rails - 如何将数据传递给 Rails 3 中的 IN 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9867744/