为什么我的in(?)子句在('1,2,3')中运行sql id而不是在(1,2,3)中运行id

时间:2011-04-17 02:40:38

标签: ruby-on-rails ruby

我有一个字符串

"1,2,3"

在一个变量中,我正在做:

User.where("id in (?)", user_id_list)

产生的sql是:

select users.* from users where (id in ('1,3,4'))

我想:

select users.* from users where (id in (1,3,4))

如何解决这个问题?

user_id_list必须是一个数组吗?

1 个答案:

答案 0 :(得分:5)

传入字符串值时,rails会用引号将其换行,这就是你看到结果的原因。

当你有一个数组时,你可以这样做:

User.where(:id => user_id_list)

并且Rails会自动为您创建IN子句。

由于这些是带有整数的用户ID,我建议你这样做:

User.where(:id => user_id_list.split(',').map(&:to_i))