【问题标题】:Rails select_tag/dropdown with enums带有枚举的 Rails select_tag/dropdown
【发布时间】:2016-10-07 01:12:42
【问题描述】:

我有一个模型 Lead,它有一个字段 Status,它通过一个枚举由多个值组成。

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>

谢谢, T

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果您不需要大写文本,在 Rails 4.2.8 中效果很好。
      【解决方案3】:

      这两个答案都很好,但它们总是会显示默认的枚举选项列表。

      如果您希望下拉菜单显示已经存在的值(例如,在现有记录的编辑表单中),请将现有值作为第二个参数添加到 options_for_select

      <%= f.select :access_level, options_for_select(Lead.statuses.map { |key, value| 
          [key.capitalize, value]
        }, @lead.status) %>
      

      在很多情况下key.humanizekey.capitalize 更好,因为它将下划线变成了空格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多