我正在创建带有多个复选框的表单,这些选项是用户角色的列表,其视图如下:
<% 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}
我在这里俯瞰什么明显的事情?
答案 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 %>