Ruby on Rails搜索和同一页面上的结果错误

时间:2018-08-29 06:36:42

标签: ruby-on-rails ruby

此处show.html显示一个下拉列表,其中包含角色。 选择角色后,我们应该可以在同一页面上获得权限结果

为此,我使用了部分但出现了图像中给出的错误

当我尝试在单独的display.html.erb文件中显示时未使用partial,我得到了正确的结果。

但是我想在相同的show.html.erb文件中得到结果。

请给我一些建议,以获得正确的结果

enter image description here

permission_controller

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

show.html.erb

<%= 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 %>

_display.html.erb

<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>

2 个答案:

答案 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资源/控制器命名约定。