![](/img/trans.png)
[英]Rails quickly find record where has_many associations exactly match array of association ids
[英]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.