ruby-on-rails - 如何将数据传递给 Rails 3 中的 IN 查询

标签 ruby-on-rails database sqlite activerecord

我正在使用 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/

相关文章:

SQLite - INSERT INTO SELECT - 如何插入 "join of 3 existing tables into a new table"的数据?

css - Bootstrap : Hovering over button with custom color not changing styling

ruby-on-rails - 使用 ActiveJob 时是否仍只传递对象 ID?

ruby-on-rails - Eventmachine 因段错误而失败

ruby-on-rails - 在 "Sign Up"之后填充数据库

java - 如何从数据库中获取距当前时间最快的值?

Mysql生成查询以生成自定义结果

sql - 在 Access VBA 的表中插入缺失值

python - SQLAlchemy:检查列类型大小给出奇怪的结果

c# - 如何在 C# 中找到以编程方式运行应用程序的路径