我需要同时将一个评论模型与两个ID相关联,但无法弄清楚如何。这是'我的情况。我正在建立一个on-line school grading system,并且需要能够让老师在特定学期(评分期)的特定课程中对某个学生发表评论。
class Course
has_many :course_terms
has_many :enrollments
end
class CourseTerm
belongs_to :course
end
class Student
has_many :enrollments
has_many :courses, :through => :enrollments
end
class Enrollment < ActiveRecord::Base
belongs_to :student
belongs_to :course
end
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
我知道它看起来非常复杂,但它非常简单。一门课程有许多学生可以注册的术语。我想对CourseTerm +学生发表评论,但我不知道Polymorphic是否可以在一个评论中处理多个ID。我可以这样做:
class CourseTerm
has_many :comments, :as => :commentable, :source => [:student, :course_term]
end
或者我是否必须放弃Polymorphics并使用带有CourseTerm.id和Student.id的标准Comment表构建?
答案 0 :(得分:1)
不,您将无法使用多态关系创建所需的映射。多态关系背后的想法是允许模型使用单个外键属于其他几个模型之一,并添加一个额外的列,指示每行引用的模型。对于评论,该表看起来像:
CREATE TABLE comments (
id integer primary key,
commentable_id integer,
commentable_type varchar(255),
text text
);
但是,由于您希望将评论与用户和课程术语相关联,因此单个外键是不够的,因此您必须使用属于用户和课程术语的标准模型:
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :course_term
end