我正在尝试为对象(用户)创建一个collection_select
字段,该字段从另一个模型(产品)获取value_method
,和来自另一个模型的text_method
( Product_description )。
产品 belongs_to
Product_description 。
Product_description.rb 有两列,:id 和:名称
如何设置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 %>
反馈将非常感谢!
答案 0 :(得分: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
是个好主意,尽管它可以不用。
答案 1 :(得分:-1)
<%= f.collection_select :product_description_id, @object.products.order(:product_description_id).includes(:product_description), :product_description_id, "production_descriptions.name" %>