在rails中显示admin的数据

时间:2018-06-11 15:43:42

标签: ruby-on-rails ruby ruby-on-rails-5

我有一个parent表和一个child表。

Parent has_many: childrenChild belongs_to:parent

父母登录然后添加他的孩子。

父模型中有一个管理字段,当设置为true时,将用户设置为管理员。

我有一个管理员视图页面,我希望管理员能够看到所有父母及其子女。

这怎么可能?以下是管理员显示页面。我在child和parent之间创建了一个连接。

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 :(得分:2)

会是这样的:

在控制器中:

@parents = Parent.includes(:children)

在视图中:

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

答案 1 :(得分:0)

由于您使用的是联接表,因此您的关系也应该has_and_belongs_to_many才能正常运行(Article了解更多信息)

示例:

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>