添加权限复选框后角色创建页出现参数的原因排查
问题原因及解决方案
问题根源
页面上出现权限参数内容的核心原因是遍历权限时错误使用了<%=标签:
<%= @permissions.each do |permission|%>
<%=会把Ruby代码的执行结果直接输出到HTML页面中,而each方法执行后会返回原数组@permissions,所以数组的内容就被直接渲染到页面上了。
修复步骤
- 修正循环输出标签:把遍历行的
<%=改成<%,这样只会执行循环逻辑,不会输出each的返回值:<% @permissions.each do |permission|%> <%= check_box_tag 'permission_ids[]', permission.id %> <%= label_tag "permission_ids[]", permission.name %> <% end %> - 优化复选框与标签关联:将原来的
f.label :permission_name替换为label_tag "permission_ids[]",这样点击权限名称时能自动选中对应的复选框,提升交互合理性。
完整修正后的代码片段
<% provide(:title, "Create Roles") %> <h1 class="dashboard">Create Role</h1> <div class="row"> <div class="col-md-6 col-md-offset-3"> <%= form_with(model: @role, local: true) do |f| %> <%= render 'shared/error_messages', object: f.object %> <%= f.label :name %> <%= f.text_field :name, class: 'form-control' %> <% @permissions.each do |permission|%> <%= check_box_tag 'permission_ids[]', permission.id %> <%= label_tag "permission_ids[]", permission.name %> <% end %> <%= f.hidden_field :company_id , value: 2%> <%= f.submit "Create Role", class: "btn btn-primary bottom" %> <% end %> </div> </div>
内容的提问来源于stack exchange,提问作者cherry123
相关产品推荐
相关产品推荐

