显示表单多个复选框的标签

时间:2019-03-13 15:22:33

标签: ruby-on-rails ruby forms

我正在创建带有多个复选框的表单,这些选项是用户角色的列表,其视图如下:

        <% roles = User.roles %>
        <% roles.each do |role| %>
          <%= f.label roles.each do %>
            <%= f.check_box :role, { multiple: true }, role, nil %>
          <% end %>
        <% end %>

我遇到的问题是正在创建复选框,并且正确的用户角色对应于每个复选框(通过使用开发人员工具确认),但是我无法在复选框旁边显示标签。

User.roles的输出如下:

{"admin"=>0, "developer_admin"=>1, "division_admin"=>2, "development_admin"=>3, "site_admin"=>4}

我在这里俯瞰什么明显的事情?

2 个答案:

答案 0 :(得分:0)

我认为该问题已通过以下更改得到纠正:

基于您最近的更新所做的更改:User.roles是一个哈希值,我们对其进行了分解并按如下所示进行传递:

    <% roles = User.roles %>
    <% roles.each do |name, value| %>
      #                v here v
      <%= f.label :role, name %>
      <%= f.check_box :role, { multiple: true }, value, nil %>
    <% end %>

您可能会将Enumerator传递给标签,而不是角色本身。尝试在控制台中无障碍地调用User.roles.each,您会得到类似#<Enumerator: ...>的信息。

作为一个简短的说明,最好在视图外部进行分配:最好在控制器中分配@roles = User.roles并在视图中使用实例变量。

希望有帮助-让我知道您的生活。

答案 1 :(得分:0)

我的代码就像SRack的答案一样,但是我已经针对哈希输出调整了它,并编辑了角色名称,因此我们可以单击文本,它将激活选项:)

<% User.roles.each do |name, value| %>
  <%= f.label "role_#{value}" do %>
    <%= f.check_box :role, { multiple: true }, value, nil %>
    <%= name %>
  <% end %>
<% end %>