:class => “在此处插入随机类名称”

时间:2014-04-07 03:05:52

标签: ruby-on-rails ruby

做这样的事情有什么意义?

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。随意重命名我的帖子,因为我不知道如何标题。

2 个答案:

答案 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约定获得灵活性。