0

Railsでこの非基本的なクエリを実行しようとしています:

proj_repartitions = ProjRepartition.includes(:proj_contributions).find( proj_project.proj_charges.each{|pc| pc.proj_repartition_id} )

重要なのは、「ids」の配列をfindメソッドに渡す必要があるということです。ActiveRecordオブジェクトの配列からこれらの「ids」を抽出したいと思います。これらの各オブジェクトには「id」属性が備わっています。

Railsコンソールで試してみると:

proj_project.proj_charges.each{|pc| pc.proj_repartition_id}

私はまったく同じ配列を手に入れましたproj_project.proj_charges

私は何が間違っているのですか?

===更新===

回答によると、私の決定的な作業コードは次のとおりです。

proj_project.proj_charges.collect{|pc| pc.proj_repartition_id}
4

3 に答える 3

1
proj_project.proj_charges.map(&:proj_repartition_id)

短い書き方

proj_project.proj_charges.map{|pc| pc.proj_repartition_id}
于 2013-03-12T16:39:06.150 に答える
1

各試行マップまたは収集を使用する代わりに、配列を返す必要があります。

于 2013-03-12T16:20:40.067 に答える
1

それぞれは、各アイテムの do ブロック コードを実行するだけで、戻り値を「保存」しません。

Collect と Map は、各項目と配列内の戻り値に対して do ブロック コードを実行します。

それが理にかなっていることを願っています

于 2013-03-12T16:33:11.533 に答える