User.find([1,2,3])
私はname
をユーザーモデルでのみ取得したいと考えています。私はオブジェクトにループしたくないので、試しました:選択したオブジェクトを引き出す
User.find([1,2,3]).pluck(:name)
運がありません。 pluck
の動作を使用して、次のシナリオを実行するにはどうすればよいですか?
User.find([1,2,3])
私はname
をユーザーモデルでのみ取得したいと考えています。私はオブジェクトにループしたくないので、試しました:選択したオブジェクトを引き出す
User.find([1,2,3]).pluck(:name)
運がありません。 pluck
の動作を使用して、次のシナリオを実行するにはどうすればよいですか?
Pluck
はその場合は機能しません。だからではなく、pluck
を使用する:
User.find([1,2,3]).pluck(:name)
map
を使用してみてください:
User.find([1,2,3]).map(&:name)
rails 5
では、それが正常に動作する必要があります。しかし、それは古いバージョンではうまくいきません。
しかし、私はid: [1,2,3]
と1つ以上のレコードが見つからない場合はwhere
を使用すると、
User.where(id: [1,2,3]).pluck(:name)
find
ため、昇給ActiveRecord::RecordNotFound
エラーがより適していると思います。
find
方法は、アレイとpluck
は、アレイ法ではありません返します
User.find([1,2,3]).collect(&:name)
または
:2.1.1 :001 > User.find([1,2,3]).pluck(:name)
User Load (3.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IN (1, 2, 3)
NoMethodError: undefined method `pluck' for #<Array:0x0000000f22ed90>
ですから、find
を使用してそれを実行したい場合は、このようにそれを行うことができます
このようにすることができます:
あなたはpluck
と
collect
の違いが必要な場合は
User.where(id: [1,2,3]).pluck(:name)
そして、あなたはこれを参照することがあります。
What is the difference between pluck and collect in Rails?
アップデートをレール5では5
が、これは動作しますRailsのために:
User.find([1,2,3]).pluck(:name)
としてЗелёный人pluck
メソッドがEnumerable
オブジェクトに追加されました。
pluck
はActiveRecord::Relation
で動作します。 find
はあなたにオブジェクトを返します。私が想定し
は、あなたはそれが単一のSQLクエリになるだろうという理由pluck
を使用すると、むしろそれらのすべてのレコードをフェッチしname
を取得するんmap
のようにそれらをループよりもname
Sのみを取得したいですその場合、あなたはあなたのユースケースに最適な方法だろう
pluck
と連鎖し
User.where(id: [1,2,3]).pluck(:name)
where
ようwhere
を使用したいと思います。
は(https://github.com/rails/rails/pull/20350)[列挙法である]、それは上に呼び出すことができます配列。 –
ありがとう@更新日時:Зелёный私は答えを更新しました。 – Deep
回答を受け入れる必要があります –