Rails邻接列表 - 父子树 - 获取root

时间:2016-02-25 01:21:13

标签: ruby-on-rails

在这个应用程序中,我有一个父子树。模型(带有一些数据)如下所示:

Subjects
Subject_id Subject_name Parent_id
1          Plants       0
2          Animals      0
3          Bacteria     0
4          Tree         1
5          Grass        1
6          Dog          2
7          Pine         4

这种关系看起来像这样:

class Subject < ActiveRecord::Base
  belongs_to :parent, class_name: "Subject"
  has_many :children, class_name: "Subject", foreign_key: "parent_id"
end

我想通过parent_id 0获取父母。我该怎么做?

我知道一个解决方案是创建一个root父级,然后用.children调用它来让root父母得到孩子,但那不是我想要做的。

2 个答案:

答案 0 :(得分:1)

以前的评论

Subject.where( :parent_id => 0 )

答案 1 :(得分:0)

首先获取活动记录时,以大写字母开头。 其次,使其成为单数。

subjects.find_by

应该是

Subject.find_by

第三,数据库中命名表字段的用户小写,如。

Parent_id >> parent_id

接下来, has_many 关系应该在父模型

这样说:

家长模式:

has_many :subjects

主题模型:

belongs_to :parent

从主题控制器获取父级。

@subject = Subject.all

在视图中,你必须像下面那样迭代它:

<% @subject.each do |sub| %>
  <%= sub.parent.title %> //title field for ex.
<% end %>

但是如果你想获得一个主题及其父数据,你可以这样做:

@subject = Subject.first
@subject.parent.title //example field from Parent Table