Проблемы при получении пользовательского интерфейса в правильном формате с использованием ruby ​​на рельсах - PullRequest
0 голосов
/ 28 августа 2018

Я работаю над проектом Ruby on rails. Я хочу получить этот формат интерфейса:

enter image description here

Я попробовал приведенный ниже код, но не получил правильных результатов. Пользователь может создавать контроллер динамически с разрешения, поэтому контроллер может быть любым (пользователь, роль, разрешение и т. Д.)

Контроллер

def display
  param = params[:role]
  id=param[:id] 
  @permission = Role
                   .joins(:permissions)
                   .where('roles.id=?',id)
                   .select('permissions.*')

end

результат @ разрешения

[#<Role id: 4, name: "index", controller: "User", created_at: "2018-08-21 
06:29:47", updated_at: "2018-08-24 06:39:37">, 
#<Role id: 16, name: "create", controller: : "User", created_at: "2018-08-24 
07:11:08", updated_at: "2018-08-24 07:11:08">, 
#<Role id: 21, name: "destroy", controller: : "User", created_at: "2018-08- 
24 07:31:17", updated_at: "2018-08-24 07:31:17">,
#<Role id: 25, name: "update", controller: : "User", created_at: "2018-08-24 
07:52:00", updated_at: "2018-08-24 07:52:00">,
#<Role id: 26, name: "edit", controller: : "Role", created_at: "2018-08-27 
06:38:39", updated_at: "2018-08-27 06:38:39">]>

просмотр

<%= link_to 'Create',  new_permission_path %>
<br/>
<thead>
<tr>
  <th width="25px"><%= "User" %></th>
 </tr>
 <tr>
 <% @permission.each do |p| %>
 <%  if (p.controller== 'User') %>
  <th width="25px"> <%= check_box_tag "p[]", p.id %> <%= p.name %></th>
 <% end %>
 <% end %>
 </tr>
 </thead>

1 Ответ

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

Я думаю, что ваша структура должна быть как ниже

образец для подражания

class Role < ApplicationRecord
  has_many :role_permissions
  has_many :permissions, through: :role_permissions, dependent: :destroy
end

модель разрешения

class Permission < ApplicationRecord
  has_many :role_permissions
  has_many :roles, through: :role_permissions, dependent: :destroy
end

и средняя таблица между ролью и разрешениями

class RolePermission < ApplicationRecord
  belongs_to :role
  belongs_to :permission
end

Создать данные из seed.rb

 Role.create!(name: admin)
Permission.create!([
    {subject_class: 'Users', action: 'create',name: 'Create a User',description: 'nil', title: "Users"},
    {subject_class: 'Users', action: 'index',name: 'List users',description: 'nil', title: "Users"},
    {subject_class: 'Users', action: 'update',name: 'Update User',description: 'nil', title: "Users"},
    {subject_class: 'Users', action: 'destroy',name: 'Remove User',description: 'nil', title: "Users"},
    {subject_class: 'Users', action: 'show',name: 'Show  User',description: 'nil', title: "Users"},

    Role.first << Permission.all

Subject Class - это имя контроллера, а action - имя действия.

В представлении вы можете загрузить все роли и разрешения, как показано ниже, я использовал аккордеон в моем представлении, поэтому вам может потребоваться обновить представление в соответствии с вашими потребностями

 <% roles = Role.includes(:permissions).all %>                                    
 <% uniq_controller = Permission.all.group_by { |p| p.title } %>
            <div class="accordion panel-group" id="accordion2">
              <% uniq_controller.each do |permission| %>

                  <div class="panel panel-default">
                    <%= link_to "##{permission.first}" ,data: {parent: "#accordion2", toggle: "collapse"} do %>
                      <div class="panel-heading">
                          <h3 class="panel-title">
                             <%= permission.first.gsub("_"," ") %>
                          </h3>
                      </div>
                    <% end %>
                    <div id="<%= permission.first %>" class="panel-collapse collapse">
                      <div class="collapse show" role="tabpanel" aria-labelledby="headingOne">
                        <div class="card-block">
                          <table>
                            <% permission.second.each do |cont| %>


                                <tr>
                                  <td><%= cont.name %></td>
                                  <td>
                                    <%= f.check_box :permission_ids, {multiple: true}, cont.id, nil %></td>
                                </tr>

                            <% end %>
                          </table>
                        </div>
                      </div>
                    </div>
                  </div>
              <% end %>
            </div>

В контроллере просто добавьте permission_ids: [] в параметрах разрешения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...