rails活动模型从同一个表查询父子

问题描述 投票:2回答:3

我有以下数据库架构

id    parent     child
1      0          No parent1
2      0          No parent2
3      1          Has parent 1
4      1          Has parent 1
5      2          Has parent 2

考虑上面的表作为我的表模式,现在我如何查询它或使用它来显示这样的东西

No parent1
    * Has parent 1
    * Has parent 1
No parent2
    * Has parent 2

这是我目前的控制员

@locations = Location.all.order(parent: :asc)

任何人都可以给我一个建议我怎么能这样做

ruby-on-rails ruby-on-rails-3 ruby-on-rails-4
3个回答
1
投票

你总是可以使用group_by。此外,这里是related question的链接。


1
投票

您正在实施父子关系。请看这个question

模型应该是这样的

class Location < ActiveRecord::Base
  has_many :childrens, :class_name => "Location"
  belongs_to :parent, :class_name => "Location" 
end

在您的位置表中添加parent_idchild_id字段。

然后打电话给@locations = Location.parents

@locations.each{|location|
 location.name
 Childrens:
 location.childrens.each{|child|
  child.name
 }
}

1
投票

我解释如下:

模型/ location.rb

  has_many :childrens, class_name: 'Location', foreign_key: :parent
  belongs_to :parent,  class_name: 'Location', foreign_key: :id

  def self.order_by_parent(top: nil)
    locations = Location.where(parent: top)

    locations_return = []
    locations.each do |location|
      locations_return << location
      auxs = Location.order_by_parent(top: location.id)
      auxs.each do |aux|
        locations_return << aux
      end
    end
    locations_return
  end

locations_controller.rb

  def index
    @locations = Location.order_by_parent(top: nil)
  end  
© www.soinside.com 2019 - 2024. All rights reserved.