Получить ассоциацию из пользовательского имени

В моей модели семинара есть столбец с именем Teacher_id. Эта часть отношений работает. Я могу вызвать семинар. учитель, чтобы получить пользователя, который преподает этот семинар.

Я хотел бы иметь возможность инвертировать этот запрос. Другими словами, мне нужно вызвать «teacher.own_seminars», чтобы получить коллекцию всех семинаров, в которых этот пользователь указан как «teacher_id». Я знаю, что мог бы вызвать Seminar.where(:teacher => учитель), но это неуклюже. И я думаю, что производительность, вероятно, будет хуже.

Примечание. Некоторые пользователи являются студентами, которые связаны с семинаром через таблицу присоединения семинара_пользователя, но я не думаю, что это влияет на этот вопрос.

Это настройка модели, которая еще не совсем работает

class User < ApplicationRecord
    has_many     :own_seminars, :class_name => "Seminar", foreign_key: 'own_seminar_ids'
end



class Seminar < ApplicationRecord
    belongs_to  :teacher, class_name: "User", foreign_key: 'teacher_id'
end

Ваше здоровье!


person Jeff Zivkovic    schedule 22.07.2017    source источник


Ответы (1)


В опции foreign_key вы указываете столбец, который является внешним ключом.

Принцип работы has_many заключается в том, что он пытается угадать, какое из полей в объекте, на который указывает ссылка, соответствует первичному ключу этого объекта. По умолчанию это user_id (производное от имени User). Но поскольку ваш столбец на самом деле называется teacher_id, вы должны использовать его.

has_many :own_seminars, 
         class_name: "Seminar", 
         foreign_key: 'teacher_id'
person Sergio Tulentsev    schedule 22.07.2017