Rails控制台按ID数组查找用户

时间:2014-01-29 15:42:30

标签: mysql ruby-on-rails ruby postgresql rails-console

所以我有一组用户ID。在rails控制台中是否有一种方法可以使用数组

查询所有这些用户

类似

ids = [1, 2, 3, 4]

users = User.find(ids)

并让它返回所有4个用户?

6 个答案:

答案 0 :(得分:104)

对于数组,您可以使用以下方法之一:

# Will raise exception if any value not found
User.find( [1,3,5] )

# Will not raise an exception
User.find_all_by_id( [1,3,5] ) # Rails 3
User.where(id: [1,3,5])        # Rails 4

如果您正在使用范围,可以使用以下方法:

# Will raise exception if any value not found
User.find((1..4).to_a)   #same as User.find([1,2,3,4])

# Will not raise an exception
User.find_all_by_id(1..4)  # Rails 3
User.where(id: 1..4)       # Rails 4

正如@ diego.greyrobot在注释中所指出的,范围会导致SQL BETWEEN子句,而数组会导致SQL IN子句。

不要使用User.find_by_id() - 无论您传递的ID如何,它都只会返回一条记录。

答案 1 :(得分:16)

您可以使用User.where(id: ids)

答案 2 :(得分:4)

使用splash操作符:

ids = [1, 2, 3, 4]

users = User.find(*ids)

请注意,如果找不到任何用户,它将引发异常。

答案 3 :(得分:2)

这对我有用......

ids = [1, 2, 3, 4]

users = User.find(ids)

users = User.find(*ids)

users = User.find_all_by_id(ids)

一切正常......

答案 4 :(得分:2)

你可以使用

   Users.where({ id: [1,2,3 ,4]})
 # SELECT * FROM users WHERE id IN (1,2,3,4)

答案 5 :(得分:1)

当所有ID都存在时,你所做的事情应该有用。

您可能看到异常的原因是因为数据库中不存在其中一个ID。

相反,如果您不想获得异常,则需要使用find_all_by_id

User.find_all_by_id([1, 2, 3, 4])

# Does the following sql:    
User Load (0.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` IN (1, 2, 3, 4)