如何在rails 3中将数据传递给IN查询

cha*_*nya 7 database sqlite activerecord ruby-on-rails

我正在使用rails 3和sqlite db.使用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}") 
Run Code Online (Sandbox Code Playgroud)

尝试过items.to_i,items.to_s但是没有用.在日志我可以看到这一点.

SELECT "versions".* FROM "versions" WHERE (item_id IN ('19,20,4,1,1,4,1'))
Run Code Online (Sandbox Code Playgroud)

但我需要的只是

 SELECT "versions".* FROM "versions" WHERE (item_id IN (19,20,4,1,1,4,1))
Run Code Online (Sandbox Code Playgroud)

Hol*_*ust 26

你可以直接传入一个数组.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)
Run Code Online (Sandbox Code Playgroud)

这比您的变体更受欢迎,因为Rails正确处理所使用的数据库适配器的所有传递值的转义.