Rails Console find users by array of ids

天涯浪子 提交于 2019-12-18 10:47:06

问题


So I have an array of user ids. Is there a way in rails console to query all of these user's with the array

something like

ids = [1, 2, 3, 4]

users = User.find(ids)

and have it return all 4 users?


回答1:


For an array, you can use one of these:

# 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

If you happen to be using a range, you can use these:

# 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

As @diego.greyrobot notes in a comment, a range causes a SQL BETWEEN clause, whereas an array causes a SQL IN clause.

Don't use User.find_by_id() -- It will only return one record, no matter how may IDs you pass in.




回答2:


you can use User.where(id: ids)




回答3:


Use splash operator:

ids = [1, 2, 3, 4]

users = User.find(*ids)

Note that it will raise an exception if it fails to find any of the users.




回答4:


This is work for me...

ids = [1, 2, 3, 4]

users = User.find(ids)

users = User.find(*ids)

users = User.find_all_by_id(ids)

All are working..




回答5:


you can use

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



回答6:


What you're doing is supposed to work when all the ids exist.

The reason you might be seeing an exception is because at least one of those ids does not exist in the database.

Instead, you want to use find_all_by_id if you don't want to get an exception:

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)


来源:https://stackoverflow.com/questions/21435768/rails-console-find-users-by-array-of-ids

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!