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

Bla*_*man 1 ruby ruby-on-rails

我有一个字符串

"1,2,3"
Run Code Online (Sandbox Code Playgroud)

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

User.where("id in (?)", user_id_list)
Run Code Online (Sandbox Code Playgroud)

结果sql是:

select users.* from users where (id in ('1,3,4'))
Run Code Online (Sandbox Code Playgroud)

我想要:

select users.* from users where (id in (1,3,4))
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

user_id_list必须是一个数组?

Mik*_*wis 5

传入字符串值时,rails会用引号将其包装起来,这就是您查看结果的原因.

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

User.where(:id => user_id_list)
Run Code Online (Sandbox Code Playgroud)

和Rails会自动为您创建IN子句.

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

User.where(:id => user_id_list.split(',').map(&:to_i))
Run Code Online (Sandbox Code Playgroud)