2

我正在尝试创建一个从我的数据库中获取数据的选择框。我在设置时遇到了麻烦。我试过这段代码:

<%= f.fields_for :unit do |u| %>
  <%= u.label :name %>
  <%= u.select :name, :class => "ingredient_unit", :prompt => "Please Select" %>
<% end %>

但我错过了选择的一部分,我不知道如何将它们从数据库中提取出来。我尝试使用collection_select,它起作用了,但是类选项不起作用......collection_select是这样的:

<%= u.collection_select :unit, Unit.all, :id, :name, :class => "ingredient_unit", :prompt => "Please Select" %>

我也不明白第一个符号是什么意思(:unit),它似乎是在设置 html id 和 name,所以这可以是我想要的任何东西吗?

4

3 回答 3

3

您应该查看collection_selectselect的文档。但是要回答您的问题,对于选择部分,您忘记传递可供选择的选项列表。您还需要交换订单promptclass因为prompt它是帮助程序的一个选项,并且class是一个 html 选项

<%= u.select :unit_id, Unit.all.map { |u| [u.name, u.id] }, { :prompt => "Please Select" }, { :class => "ingredient_unit" } %>

对于集合选择

<%= u.collection_select :unit_id, Unit.all, :id, :name, { :prompt => "Please Select" }, { :class => "ingredient_unit" } %>

传递给这两个助手的第一个参数是您希望保存所选答案的列名。上面的 2 个代码仅显示了生成相同选择标签的 2 种不同方法。

于 2013-03-29T14:57:31.173 回答
2

第一个符号告诉它使用从用户选择返回的 id 填充哪个字段。

此外,您应该将类​​部分包装在 {}

于 2013-03-29T14:50:16.803 回答
2

:unit指您用于选择元素的模型属性。是的,它将设置元素的名称/ID(名称对于参数哈希来说是最重要的)。

要在 collection_select 中设置一个类,请将其指定为哈希,因为该助手将其作为 html_option。

<%= u.collection_select :unit, Unit.all, :id, :name, { :prompt => "Please Select" }, { :class => "ingredient_unit" } %>
于 2013-03-29T14:51:30.723 回答