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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rails活动模型从同一个表查询父子相关的知识,希望对你有一定的参考价值。

我有以下数据库架构

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)

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

答案

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

另一答案

您正在实施父子关系。请看这个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
 }
}
另一答案

我解释如下:

模型/ 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  

以上是关于rails活动模型从同一个表查询父子的主要内容,如果未能解决你的问题,请参考以下文章

可以在控制器操作中使用活动记录查询吗?

单表继承 活动管理模型映射问题 rails 4

Rails 4 - 如何在活动记录查询中为包含()和连接()提供别名

通过rails中关联模型的子类查询

将数据从底部工作表对话框片段传递到片段

如何从另一个活动或底部工作表对话框/片段中关闭一个活动