在我的Rails应用程序中,我创建了一个类别模型和几个具有不同名称的实例,因此用户可以将他们列出待售的产品添加到一个类别中。唯一的问题是:
<%= f.select :category, Category.all, :prompt => "Select One" %>
使用此代码时,类别会正确显示,但如果我尝试使用Category.all.name,则不会显示。我可能真的很累,但是如何显示每个类别的:name属性而不是一个神秘的实例标识符?
答案 0 :(得分:3)
我认为您正在寻找collection_select
:
<%= f.collection_select :category, Category.all, :id, :name, :prompt => 'Select One' %>
答案 1 :(得分:1)
Category.all
将返回一系列类别
如果您想要所有类别的名称,
试试这个,
Category.all.map(安培;:名称)
您可能需要像这样修改select tag
<%= f.select :category, Category.all.map(&:name), :prompt => "Select One" %>
答案 2 :(得分:1)
Rails有一个非常有用的方法,如pluck
:
作为选择一个或多个属性而不加载一堆的快捷方式 记录只是为了获取你想要的属性。
<%= f.select :category, Category.pluck(:name), :prompt => "Select One" %>
但这不是Rails方式,在视图中使用Class,你必须在控制器中声明@variable并将其传递给select helper:
控制器动作:
@names = Category.pluck(:name)
在观点中:
<%= f.select :category, @names, :prompt => "Select One" %>