如何在集合中显示资源名称列表(表单中的选择)

时间:2015-03-23 09:58:00

标签: ruby-on-rails

我有一个名为Product_Categories的表格:

:string :name
:string :icon

我在表单中有一个选择,我想显示产品类别的名称:

<%= builder.select :name, collection: @product_categories.each {|product_category| product_category.name} %>

@product_categories是:

@product_categories = Product_Category.all

它没有显示名称,而是显示选择下拉列表中的整个对象。

如何遍历@product_categories以显示名称?

谢谢!

3 个答案:

答案 0 :(得分:1)

尝试此操作,您可以传递控制器操作id以在您的业务逻辑中使用它,name将显示给用户

<%= builder.select :name, collection: @product_categories.collect {|p| [ p.name, p.id ] } %>

等价HTML,类似这样

<select name="product[id]">
    <option value=""></option>
    <option value="1">name1</option>
    <option value="2">name2</option>
    <option value="3">name3</option>
</select>

答案 1 :(得分:1)

改为使用map

如果您想显示name并使用name作为值

<%= builder.select :name, collection: @product_categories.map {|product_category| product_category.name} %>

如果您想显示name并使用id作为值,请尝试使用

<%= builder.select :name, collection: @product_categories.map {|product_category| [product_category.name, product_category.id]} %>

答案 2 :(得分:0)

这样的事情应该更高效,更简单,不需要构建数组然后在数组上使用#each来构建选项,这将直接在集合上执行

builder.collection_select :name, @product_categories, :id, :name