Отображение данных для администратора в рельсах - PullRequest
0 голосов
/ 11 июня 2018

У меня есть таблица parent и таблица child.

A Parent has_many: children и Child belongs_to:parent.

Родитель входит в систему, а затем добавляет своих детей.

В родительской модели есть поле администратора, которое при значении true устанавливает пользователя в качестве администратора.

У меня есть страница просмотра администратора, на которой я хочу, чтобы администратор мог видеть всех родителей и их детей.

Как это возможно?Ниже приведена страница администратора.Я создал соединение между потомком и родителем.

parent.rb

class Parent < ApplicationRecord
  has_many :children, dependent: :destroy
end

child.rb

class Children < ApplicationRecord
  belongs_to :parent
end

Файл миграции для присоединения к таблице:

class CreateJoinTableParentChild < ActiveRecord::Migration[5.2]
  def change
    create_join_table :parents, :children do |t|
      t.index [:parent_id, :child_id]
      t.index [:child_id, :parent_id]
    end
  end
end

main_admin.html.erb

<div class="col-sm-9 col-xs-12">
  <div class="content" role="main" id="main-content">
    <article>
      <div>
        <h1>Admin</h1>
        <div class="table-responsive">
          <table class="table table-bordered">
            <tbody>
              <tr>
                <th>Primary Parent</th>
                (displays all parents)
                <th>Children</th>
                (displays children belonging to that parent)
              </tr>
            </tbody>
          </table>
        </div>
      </div>           
    </article>
  </div>
</div>

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Поскольку вы используете объединяющую таблицу, ваши отношения также должны быть has_and_belongs_to_many для правильной работы ( Артикул для получения дополнительной информации)

Пример:

class Parent < ApplicationRecord
  has_and_belongs_to_many :children, dependent: :destroy
end

# Note the singular "Child" 
class Child < ApplicationRecord
  # Note the pluralization because a Child can have more than 1 Parent
  has_and_belongs_to_many :parents 
end

Теперь, если я правильно понимаю, вы ищете что-то вроде

class SomeController < ApplicationController
  def main_admin
    @parents = Parent.includes(:children).references(:children) 
  end
end

А потом main_admin.html.erb

<div class="col-sm-9 col-xs-12">
  <div class="content" role="main" id="main-content">
    <article>
      <div>
        <h1>Admin</h1>
        <div class="table-responsive">
          <table class="table table-bordered">
            <thead>
              <tr>
                <th>Primary Parent</th>
                <th>Children</th>
              </tr>
            </thead>
            <tbody>
              <% @parents.each do |parent| %>
                <tr> 
                   <td><%= parent.name %></td>
                   <td><%= parent.children.map(&:name).join(', ') %>
                </tr>
              <% end %>
            </tbody>                 
          </table>
        </div>
      </div>           
    </article>
  </div>
</div>

В этом списке будут указаны имя родителя и имена детей, объединенные запятой.

Обновление (за комментарий):

<div class="col-sm-9 col-xs-12">
  <div class="content" role="main" id="main-content">
    <article>
      <div>
        <h1>Admin</h1>
        <div class="table-responsive">
          <table class="table table-bordered">
            <thead>
              <tr>
                <th>Primary Parent</th>
                <th>Child</th>
              </tr>
            </thead>
            <tbody>
              <% @parents.each do |parent| %>
                <% parent.children.each do |child| %>
                  <tr> 
                    <td><%= parent.name %></td>
                    <td><%= child.name %></td>
                  </tr>
                <% end %>
              <% end %>
            </tbody>                 
          </table>
        </div>
      </div>           
    </article>
  </div>
</div>
0 голосов
/ 11 июня 2018

Это будет примерно так:

В контроллере:

@parents = Parent.includes(:children)

В представлении:

<% parents.each do |parent| %>
  <%= parent.id %>
  <% if parent.admin? %>
    <% parent.children.each do |child| %>
      <%= child.id %>
    <% end %>
  <% end %>
<% end %>
...