collection_select使用值和文本方法之间的不同模型

时间:2012-09-19 18:28:00

标签: ruby-on-rails model

我正在尝试为对象(用户)创建一个collection_select字段,该字段从另一个模型(产品)获取value_method,和来自另一个模型的text_method Product_description )。

通过 product_description_id

产品 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 %>

反馈将非常感谢!

2 个答案:

答案 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" %>