Ruby on Rails поиск и результат на той же странице ошибки - PullRequest
0 голосов
/ 29 августа 2018

Здесь show.html отображает выпадающий список, в котором содержатся роли. Когда мы выбираем роль, мы должны иметь возможность получить разрешение на той же странице

Для этого я использовал частичное, но получаю ошибку, как показано на рисунке,

Без использования частичного, когда я пытался отобразить в отдельном файле display.html.erb, я получаю правильный результат.

но я хочу получить результат в том же 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 голосов
/ 29 августа 2018

Вы не определили @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.

0 голосов
/ 29 августа 2018

Вы не определили @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...