Rails самореферентный через has_many - PullRequest
2 голосов
/ 02 марта 2011

Я пытаюсь создать самоссылочный пользовательский класс с тремя основными типами пользователей - родитель, ученик и репетитор. Ученик принадлежит родителю и может также принадлежать к репетитору. Конечно, как я это написал, рельсы распознают только родителей, у которых есть ученики. 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 Ответ

1 голос
/ 02 марта 2011

Это происходит из-за того же имени (студенты) отношений.

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

Так что вам нужно использовать другое имя, тогда оно будет работать.

-Ashish

...