繁体   English   中英

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

[英]Rails Console find users by array of ids

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

就像是

ids = [1, 2, 3, 4]

users = User.find(ids)

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

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

# 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如何。

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

使用splash操作符:

ids = [1, 2, 3, 4]

users = User.find(*ids)

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

这对我有用......

ids = [1, 2, 3, 4]

users = User.find(ids)

users = User.find(*ids)

users = User.find_all_by_id(ids)

一切正在......

您可以使用

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

当你所有的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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM