2 つのサンプル コードを次に示します。
最初のものcollect
:
User.first.gifts.collect(&:id)
2番目のものpluck
:
User.first.gifts.pluck(:id)
それらの間にパフォーマンスまたは何か他の違いはありますか?
2 つのサンプル コードを次に示します。
最初のものcollect
:
User.first.gifts.collect(&:id)
2番目のものpluck
:
User.first.gifts.pluck(:id)
それらの間にパフォーマンスまたは何か他の違いはありますか?
pluck
dbレベルです。特定のフィールドのみを照会します。これを参照してください。
あなたがするとき:
User.first.gifts.collect(&:id)
すべてのフィールドがロードされたオブジェクトがありid
、Enumerable に基づくメソッドのおかげで簡単に取得できます。
そう:
Rails 4のみが必要な場合は、次を使用します。id
ids
User.first.gifts.ids
Rails 4 で一部のフィールドのみが必要な場合は、次を使用しpluck
ます。User.first.gifts.pluck(:id, :name, ...)
Rails 3 でフィールドが 1 つだけ必要な場合は、次を使用しpluck
ます。User.first.gifts.pluck(:id)
すべてのフィールドが必要な場合は、使用しますcollect
Rails 4でいくつかのフィールドが必要な場合でも、引き続き使用しますpluck
Rails 3 でいくつかのフィールドが必要な場合は、 and を使用select
しますcollect
基本的かつ主な違いは、Pluck が db レベルで適用され、collect がすべてのデータを取得してから、すべてのレコードが必要な場合に collect を使用し、少数のフィールドが pluck を使用する場合にレコードを返すことです。
取得したレコードの属性をほとんど使用していない場合があります。そのような場合は、 を使用する必要がありますpluck
。
User.collect(&:email)
上記の例では、メール属性のみが必要な場合は、メモリと時間を浪費しています。データベースのユーザー テーブルからすべての列を取得するため、各属性 (決して使用しない属性を含む) にメモリを割り当てます。
注:pluck
ユーザーの ActiveRecord_Relation は返されません