0

我有两个这样的模型

 class User < ActiveRecord::Base

   attr_accessible :email, :password, :password_confirmation, :remember_me, :fname, :lname
 end

 class Course < ActiveRecord::Base

  belongs_to :university
   attr_accessible :course_code, :department, :name, :path, :university_code, :department_code

 set_primary_key :course_code
end

现在一个用户可以参加很多课程,一个课程可以有很多用户。此外,连接表将具有一些属性,例如用户正在学习的课程状态、他可能已完成的讲座等。

我该如何建立关系?

4

1 回答 1

2

如果课程具有“唯一性”概念,那么您将需要一个中间模型(例如 UserCourseResults),因此在数据库的任何给定状态下,每个课程都可以是唯一的。然后,您只需按如下方式组织:

User:
  has_many    :user_course_results
  has_many    :courses, through: user_course_results
Course:
  has_many:   :user_course_results
  has_many:   :users, through: user_course_results
UserCourseResult:
  attr_accessible :result # So each user can have a result on each course, for instance.
  belongs_to  :user
  belongs_to: :course

你看到中间模型的意义了吗?

高温下,

皮埃尔。

编辑:我刚刚看到您的编辑,我想这正是您的想法。您必须记住,用户模型只保存每个用户唯一的数据,课程模型也是如此。所以最好的可能是拥有这个中间的“UserCourseResult”模型,它可以保存任何用户课程特定的数据......这种关系,当你不需要中间数据时,除了用户和课程之间的链接,被称为HABTM(拥有并属于许多)。您应该查看活动记录文档中的这个特定部分(参见 has_many: through => * 和 has_and_belongs_to_many)。

于 2012-07-19T01:28:23.710 回答