【问题标题】:Rails Has and Belongs To Many AssociationsRails 拥有并属于许多协会
【发布时间】:2015-05-14 06:28:36
【问题描述】:

我的问题与关联有关。请原谅我,因为我只是在学习这个。

我有两张桌子(父母和孩子)。我已经建立了关联,其中父表设置为 has_many 子表,子表有一个父表,其外部 id 设置为 parent_id。这工作正常。

我的问题是,我想创建一个家庭视图,显示父母和孩子在一起并相互关联。所以它看起来像这样:

父母姓名

  • 孩子姓名
  • 孩子姓名

我很确定我需要创建一个族表并进行 has_and_belongs_to_many 关联,但不确定如何像上面那样将两者一起显示 希望这是有道理的。

【问题讨论】:

  • 我认为如果您在孩子模型中定义孩子有一个父母,那么您的关联出了问题,那么 child_id 应该是您父母表中的外键。

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

如果您只想在视图中显示父母和他们的孩子,您不需要创建新表,只需执行以下操作:

在您的父母控制器的索引操作中(我正在考虑您想向所有父母展示他们的孩子,所以我正在使用索引操作):

def index
  @parents= Parent.all.includes(:children)
end

然后在您的 index.html.erb 视图上:

<% @parents.each do |parent| %>
  <%= parent.name%><br/>
  <% parent.children.each do |child| %>
    <%= child.name%><br/>
  <% end %>
<% end %>

考虑到您已经定义了父子模型之间的关联

【讨论】:

    【解决方案2】:
    class Parent
     has_many :children
    end
    
    class Child
     belongs_to :parent
    end 
    

    在控制器中

    @parent = Parent.find(params[:id]).includes(:children)
    

    在视图中

    <% @parent.children.each do |child| %>
      <%= child.name %>
    <% end %>
    

    【讨论】:

    • 考虑到 N + 1 个查询问题,您可以在获取父级时包含子级:@parent = Parent.includes(:children).find(params[:id])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多