0

我正在尝试collection_select为一个对象(user)创建一个字段,该字段value_method从另一个模型(Product)获取它,并text_method从另一个模型(Product_description)获取它。

产品 belongs_to Product_description通过product_description_id

Product_description.rb有两列,:id:name

我该如何设置text_method?以下代码提供了正确的输入,但显示的是product_description_id整数而不是相应的文本名称。如何从product_description表中获取相应的“名称” ?

<%= 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 回答