2016-12-07 3 views
3

Я пишу код, который использует несколько самореференциальных моделей, которые я хотел бы иметь, чтобы сопоставлять таблицу соединений, поскольку они связаны через нее ,Множество самореферентных has_many: через ассоциации в Rails 4.

Модели выглядят как

User.rb:

class User < ActiveRecord::Base 
    has_many :appointments 
    has_many :students, through: :appointments 
    has_many :teachers, through: :appointments 
end 

Appointment.rb:

class Appointment < ActiveRecord::Base 
    belongs_to :student, class_name: User 
    belongs_to :teacher, class_name: User 
end 

К сожалению, запрос генерируется Rails является:

SELECT "users".* FROM "users" INNER JOIN "appointments" ON "users"."id" = "appointments"."student_id" WHERE "appointments"."user_id" = $1 

Что вызывает ошибку, потому что параметр Назначения не имеет параметра user_id.

Я уже пробовал указать опцию foreign_key, но это ничего не сделало. Любые другие способы я могу решить это элегантно?

спасибо.

+2

«... запрос, созданный Rails ...» - для какого звонка? Что вы сделали, чтобы получить этот запрос? Вы не указали, но было бы проще понять с первого взгляда, какой вызов вы пытаетесь. – coreyward

+0

Я пробовал 'User.first.students'. – Alex

+1

Вы можете показать свою попытку указать параметр внешнего ключа? –

ответ

2

Мне удалось решить эту проблему. В has_many, на котором has_many: through основан, должна быть установлена ​​опция foreign_key. Код стал:

class User < ActiveRecord::Base 
    has_many :appointments_as_student, foreign_key: :student_id, class_name: Appointment 
    has_many :appointments_as_teacher, foreign_key: :teacher_id, class_name: Appointment 

    has_many :students, through: :appointments_as_teacher 
    has_many :teachers, through: :appointments_as_student 
end 

Спасибо всем за ваши усилия.

Смежные вопросы