我有一个名为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以显示名称?
谢谢!
答案 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