从自定义名称获取关联

时间:2017-07-22 20:50:36

标签: ruby-on-rails associations rails-activerecord class-names

我的研讨会模型有一个名为teacher_id的列。这部分关系正在发挥作用。我可以打电话给seminar.teacher来检索教授该研讨会的用户。

我希望能够反转该查询。换句话说,我需要调用teacher.own_seminars来获取该用户列为teacher_id的所有研讨会的集合。我知道我可以打电话给Seminar.where(:老师=>老师),但那很笨重。我认为表现可能更差。

注意:有些用户是通过研讨会用户加入表链接到研讨会的学生,但我认为这不会影响这个问题。

这是一个尚未完成工作的模型设置

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

干杯!

1 个答案:

答案 0 :(得分:2)

foreign_key选项中,您指定的列是外键

has_many的工作方式是,它试图猜测,引用实体中的哪一个字段对应于该实体的主键。默认情况下,它是user_id(从名称User派生)。但由于您的列实际上名为teacher_id,因此您应该使用它。

has_many :own_seminars, 
         class_name: "Seminar", 
         foreign_key: 'teacher_id'