1

在我的 Rails 应用程序中,用户可以创建课程和学校(组)。每次用户创建课程或学校时,他们的 user_id 都会存储在课程或学校的数据库表中,因此用户 has_many :schools 和 :courses 以及学校或课程 belongs_to :user。此外,用户可以通过关系模型使用 has_many 参加课程和加入学校(作为学生或教授)(对于具有 :user_id、school_id 和 :role [string] 的学校的学校组,以及对于课程 student_users(和professor_users)它有一个:user_id、course_id 和:role [string]。我的问题是,在用户模型中,我可以只指定一次:

has_many :schools, :dependent => :destroy
has_many :courses, :dependent => :destroy
has_many :schoolgroups, :dependent => :destroy
has_many :student_users, :dependent => :destroy
has_many :professor_users, :dependent => :destroy

还是我必须有一个看起来像这样的用户模型:

has_many :schools, :dependent => :destroy
has_many :courses, :dependent => :destroy
has_many :schoolgroups, :dependent => :destroy
has_many :schools, :through => :schoolgroups
has_many :student_users, :dependent => :destroy
has_many :courses, :through => :student_users
has_many :professor_users, :dependent => :destroy
has_many :courses, :through => :professor_users
4

1 回答 1

1

您需要更详细地考虑模型的所有权。has_many意味着多对一的关系,所以说Professor has_many Courses意味着教授拥有课程,而课程只有一位教授(或者有吗?)。所以你会做这样的事情:

has_many :school, :dependent => :destroy
has_many :courses, :dependent => :destroy
has_many :schoolgroups, :dependent => :destroy

另一方面,您将拥有与用户关联的事物,但其他用户也可能以相同的方式关联。例如,用户可以是课程中的学生,但许多其他学生也可以。为此,您需要使用has_and_belongs_to_many代表多对多关系的或 HABTM:

has_and_belongs_to_many :courses_as_student, :class_name => "Course",
                                             :join_table => "student_users"

然后在Course课堂上:

belongs_to :user

# or even better:
# belongs_to :professor, :class_name => "User", :foreign_key => "professor_id"

has_and_belongs_to_many :students, :class_name => "User",
                                   :join_table => "student_users"

您可以阅读Rails 文档中的所有详细信息。

于 2012-06-18T15:02:13.243 回答