web-dev-qa-db-ja.com

RailsコンソールはIDの配列でユーザーを検索します

したがって、ユーザーIDの配列があります。 Railsコンソールにこれらのすべてのユーザーの配列を照会する方法はありますか

何かのようなもの

ids = [1, 2, 3, 4]

users = User.find(ids)

そして、それは4人のユーザー全員を返しますか?

43
Seth

配列の場合、次のいずれかを使用できます。

_# 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句を引き起こします。

しない use User.find_by_id()-どのようにIDを渡しても、1つのレコードのみを返します。

107

User.where(id: ids)を使用できます

16
Nitin Jain

スプラッシュ演算子を使用します。

ids = [1, 2, 3, 4]

users = User.find(*ids)

ユーザーが見つからない場合は例外が発生することに注意してください。

4
BroiSatse

使用できます

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

これは私の仕事です...

ids = [1, 2, 3, 4]

users = User.find(ids)

users = User.find(*ids)

users = User.find_all_by_id(ids)

すべてが機能しています。

2
Dheer

あなたがしていることは、すべてのIDが存在するときに機能するはずです。

例外が表示されるのは、これらのIDの少なくとも1つがデータベースに存在しないためです。

代わりに、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)
1
Abdo