したがって、ユーザー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句を引き起こします。
しない use User.find_by_id()
-どのようにIDを渡しても、1つのレコードのみを返します。
User.where(id: ids)
を使用できます
スプラッシュ演算子を使用します。
ids = [1, 2, 3, 4]
users = User.find(*ids)
ユーザーが見つからない場合は例外が発生することに注意してください。
使用できます
Users.where({ id: [1,2,3 ,4]})
# SELECT * FROM users WHERE id IN (1,2,3,4)
これは私の仕事です...
ids = [1, 2, 3, 4]
users = User.find(ids)
users = User.find(*ids)
users = User.find_all_by_id(ids)
すべてが機能しています。
あなたがしていることは、すべての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)