0

別のモデル ( Product ) とさらに別のモデル ( Product_descriptioncollection_select ) から取得するオブジェクト ( user )のフィールドを作成しようとしています。value_methodtext_method

product_description_id経由の製品belongs_to Product_description

Product_description.rbには、 :id:nameの 2 つの列があります。

を設定するにはどうすればよいtext_methodですか? 次のコードは正しい入力を提供しますが、対応するテキスト名の代わりにproduct_description_id整数を示しています。product_descriptionテーブルから対応する「 name 」を取得するにはどうすればよいですか?

<%= f.collection_select :product_description_id, @object.products.order(:product_description_id), :product_description_id, :product_description_id %>

私はこれを試しましたが、これは私に無効なステートメントを与えます。

<%= f.collection_select :product_description_id, @object.products.order(:product_description_id), :product_description_id, ProductDescription.find(:product_description_id).name %>

フィードバックをお待ちしております。

4

2 に答える 2

1

できません (少なくとも、説明を返すメソッドを製品に追加するか、説明メソッドを使用して製品をオブジェクトにラップしない限り、それはできません。製品クラスのユーザーが実際に実装の詳細を知る必要がある場合、それはおそらく良い考えです。名前は別のテーブルに保存されますか?

ただし、collection_select は一般的なケースの便利なメソッドに過ぎないことを覚えておいてください。そのケースに当てはまらない場合は、「通常の」選択を使用しても問題はありません。

f.select :product_description_id, @object.products.order(:product_description_id).collect {|product| [product.production_description.name, product.product_description_id]}

を追加することをお勧めしますが、includesなくても機能します。

于 2012-09-19T20:30:10.653 に答える
-1
<%= f.collection_select :product_description_id, @object.products.order(:product_description_id).includes(:product_description), :product_description_id, "production_descriptions.name" %> 
于 2012-09-19T20:09:46.683 に答える