此处show.html
显示一个下拉列表,其中包含角色。
选择角色后,我们应该可以在同一页面上获得权限结果
为此,我使用了部分但出现了图像中给出的错误
当我尝试在单独的display.html.erb
文件中显示时未使用partial,我得到了正确的结果。
但是我想在相同的show.html.erb
文件中得到结果。
请给我一些建议,以获得正确的结果
def display
param = params[:role]
id=param[:id]
@roles = Role.includes(:permissions).all
@uniq_controller = Role.joins(:permissions).where('roles.id=?',id).select('permissions.*').group_by { |p| p.description }
redirect_to permissions_show_path
end
def show
@permission = Permission.new
end
<%= form_tag(:controller => "permissions", :action => "display") do %>
<%= collection_select(:role, :id, Role.all, :id, :name) %>
<button type="submit">search</button>
<% end %>
<th width="25px"> <%= "Controller" %></th>
<th width="25px"> <%= "Permissions" %></th>
<% @uniq_controller.each do |permission| %>
<%= render partial:"display", locals:{permission:permission} %>
<% end %>
<thead>
<th width="25px"> <%= permission.first.gsub("_"," ") %></th>
<% permission.second.each do |cont| %>
<tr>
<th width="25px"><%= check_box_tag :permission_ids, {multiple: true},
cont.id %><%= cont.name %></th>
</tr>
<% end %>
</thead>
答案 0 :(得分:1)
您尚未在触发该错误的@uniq_controller
操作中定义show
。只需在表演动作中定义它
def show
@permission = Permission.new
@uniq_controller = Role.joins(:permissions).where('roles.id=?',id).select('permissions.*').group_by { |p| p.description }
end
答案 1 :(得分:1)
您尚未在@uniq_controller
控制器的show
动作中定义permission_controller
来触发此错误。
我建议您在uniq_controller
中定义一个称为permission_controller
的方法,如下所示:
def uniq_controller(id)
Role.joins(:permissions).where('roles.id=?',id).select('permissions.*').group_by { |p| p.description }
end
,然后通过将以下代码添加到您的permission_controller
中来使它在您的视图中作为辅助方法可用:
helper_method :uniq_controller
因此permission_controller
中的代码应类似于:
helper_method :uniq_controller
def display
@roles = Role.includes(:permissions).all
redirect_to permissions_show_path
end
def show
@permission = Permission.new
end
def uniq_controller(id)
Role.joins(:permissions).where('roles.id=?',id).select('permissions.*').group_by { |p| p.description }
end
然后在您的视图中show.html.erb
替换:
@uniq_controller.each
具有:
uniq_controller(params[:role][:id]).each
这应该可以解决您遇到的错误并遵循Rails的惯例,有关helper_method
的更多详细信息,请参阅:
https://apidock.com/rails/ActionController/Helpers/ClassMethods/helper_method
另一项建议是将permission_controller
重命名为permissions_controller
,以遵循Rails资源/控制器命名约定。