Rails自我引用has_many通过

时间:2011-03-02 09:54:11

标签: ruby-on-rails ruby-on-rails-3 has-many-through has-many-polymorphs

我正在努力创建一个具有三种基本用户类型的自引用用户类 - 父,学生和导师。学生属于父母,也可以属于导师。当然,我写它的方式,rails只能识别有学生的父母。如果用户是导师,User.students总是返回空,但是当用户是父级时,它会起作用。有什么想法吗?

class User < ActiveRecord::Base
# Sets up the tutor has_many students assocation
has_many :tutees, :foreign_key=>"tutor_id",
                :class_name=>"Relationship"
has_many :students, :through=>:tutees

# Sets up the student has_many tutors association
has_many :mentors, :foreign_key=>"student_id",
                 :class_name=>"Relationship"
has_many :tutors, :through=>:mentors

# Sets up the parent has_many students assocation
has_many :children, :foreign_key=>"parent_id",
                  :class_name=>"Relationship"
has_many :students, :through=>:children

# Sets up the student has_many parents 
has_many :mommies, :foreign_key=>"student_id",
                 :class_name=>"Relationship"
has_many :parents, :through=>:mommies

关系类:

class Relationship < ActiveRecord::Base
 belongs_to :tutor, :class_name=>"User"
 belongs_to :student, :class_name=>"User"
 belongs_to :parent, :class_name=>"User"
end

这些部分(家长,学生,导师)也都是他们自己的班级。基本用户信息位于User类中,而导师特有的数据位于Tutor类中。

1 个答案:

答案 0 :(得分:1)

这是因为关系的同名(学生)而发生的。

In your case,
has_many :students, :through=>:tutees
overrides by
has_many :students, :through=>:children
relation.

所以你需要使用不同的名称然后才能运作。

-Ashish