Rails select_tag / dropdown with enums

时间:2016-06-07 08:25:50

标签: ruby-on-rails drop-down-menu enums

我有一个模型主管,其中包含一个字段状态,该状态通过枚举包含多个值。

enum status: { open: 0, closed: 1, qualified: 2, rejected: 3 }

我正在尝试创建一个选择字段(在表格中),其中新状态将通过ajax保存。有人可以帮助我创建select_tag,在线我可以找到有效的枚举,但因为我有ID和值,它有点复杂。

此刻我有类似的东西,虽然它不起作用:

  <tbody>
    <% @leads.each do |lead| %>
    <tr class="<%=cycle('odd', 'even') %> location_row" id="lead_row" data-id="<%= lead.id%>">
      <td><%= lead.id %></td>
      <td><%= lead.fullname %></td>
      <td><%= lead.email %></td>
      <td><%= lead.phone %></td>
      <td><%= select_tag :Status, Lead.statuses.keys.to_a %></td> #trying this, without luck
      <td><%= select_tag :Status, Lead.statuses.keys.to_a.map { |w, v| [w.titleize, v] }%></td> #2nd try, without luck
      <td><%= link_to (fa_icon "pencil-square-o "), edit_lead_path({:id => lead.id, :first_last_name => lead.first_last_name}), :title => 'Edit Lead', :class => "action-button" %></td>
    </tr>
    <% end %>
  </tbody>

谢谢, Ť

3 个答案:

答案 0 :(得分:15)

我通过反复试验找到了答案。

<%= select_tag :status, options_for_select(Lead.statuses.map {|k, v| [k.humanize.capitalize, v]}) %>

答案 1 :(得分:7)

您可以使用以下代码选择状态枚举作为选项:
    <%= select_tag :status, options_for_select(Lead.statuses) %>

答案 2 :(得分:1)

两个答案都不错,但它们始终显示默认的枚举选项列表。如果您希望下拉菜单显示已经存在的值(例如,在现有记录的编辑表单中),请添加

@your_model_name.your_enum_name

到选择字段选项。像这样:

<%= f.select :access_level, options_for_select(User.access_levels.map {|key, value| [key.capitalize, value]}, @user.access_level) %>