做这样的事情有什么意义?
class User
has_many :students, :class_name => "CoachStudent", foreign_key: "coach_user_id"
end
class CoachStudent
belongs_to :student, :class_name => "User", :foreign_key => "student_user_id"
end
为什么呢?
为什么不是用户有很多学生,学生属于用户?这是传统方式,是吗?
编辑
我的困惑源于这样一个事实:本身没有学生课程。它在上面的代码中列出。因此这个问题。
PS。随意重命名我的帖子,因为我不知道如何标题。
答案 0 :(得分:3)
它为代码提供了更多的含义。
我不知道CoachStudent在你的例子中是什么,但想想一个人正在撰写博客帖子的博客示例:
class BlogPost < ActiveRecord::Base
belongs_to :author, class: 'User'
end
是的,你可以在技术上说帖子有一个用户,但如果你说帖子有一个作者,那就更有意义了(并且含义更多)。
另外,如果帖子与用户有多处关系 - 例如,作者,审阅者和审批者?您需要不同的关联名称来区分它们。
答案 1 :(得分:0)
:class_name使您可以灵活地根据需要为关联命名,并使代码更具可读性和可重用性。 :foreign_key属性再次允许您决定要作为外键的字段。
如果你按照通常惯例去做:
class User
has_many :students
end
class CoachStudent
belongs_to :student
end
默认情况下,ActiveRecord将使用_id作为外键,并尝试为关联查找类Student
。显然,在您的情况下,您希望使用:students
作为关联名称并将其映射到CoachStudent
。您可以通过:class_name约定获得灵活性。