2017-05-26 13 views
0

私はどのように私は同じことを実行しようとするとハンドルがModel.ids and Model.select(:id).map(&:id)Model.idsとModel.selectの違い(:ID)の.map(&:ID)

に呼び出すレール見つけようとしてきました私は

Model.idsは、Active Recordのモデル

をロードしない違いを見るコンソールがしかし、Model.select(:ID)の.map(&:ID)は、アクティブレコードモデルをロードします。

Railsがアクティブなレコードモデルをロードする時期とそうでない場合は誰でも共有できます。

また、ローディングアクティブレコードモデルには利点/不利点があり、逆もあります。

答えて

2

Model.ids

Model.pluck(:id) 

に相当し、データベースがあなたのための配列を返すように高速メソッドです。

Model.select(:id) 

は...テーブル行(Modelオブジェクト)を返すだけ:id属性を持つので、あなたはその後:id配列を取得するために#mapメソッドを使用します。これは、その後#mapで処理する必要のあるオブジェクトのアクティブレコードの関係を作成するため

Model.select(:id).map(&:id) 

だから、これはあまり効率的です。

従ってModel.idsが好ましい。

通常、直接的または間接的に使用される.pluckは、active_recordモデルをロードしません。 .selectがあります。 .whereおよび.orderは、自動的にdb SELECTコールを含みます。

+0

あなたの回答がありがとうSteveさん、私に教えてください。私たちが直接データベースからの回答を得るための追加の方法は何ですか?そして、どうやってそのような方法を特定するのか。あなたはいくつかのドキュメントを教えてくれますか? –

+0

これは良い指針であり、各ActiveRecordコマンドに対応するSQLを示しています。 http://guides.rubyonrails.org/active_record_querying.html – SteveTurczyn

関連する問題