表。(只包括相关列)
模型。(这是我试过的型号)
class User < ApplicationRecord
has_many :reviews
end
class Review < ApplicationRecord
belongs_to :user
belongs_to :reviewable, polymorphic: true
scope :subject_one, -> { where(reviewable_type: SubjectOne.name) }
end
class Reviewable < ApplicationRecord
has_many :reviews, as: :reviewable
end
class SubjectOne < Reviewable
end
class SubjectTwo < Reviewable
end
的行数 subject_ones
和 subject_twos
不会真正改变,用户可以选择从每个表中包含行。这两张表的不同之处在于它们需要不同的表,但评论本身的数据模型是一样的。对于不同的类型,对用户的显示也会不同。reviews
是唯一的,在 user_id
, reviewable_type
和 reviewable_id
我希望最终的结果是,我可以做到 user.reviews.subject_one.first.reviewable
并返回第一个 subject_ones
记录。
基本上,我很难搞清楚如何将 "可审查 "从 review
.
现在如果打电话 user.reviews.subject_one.first.reviewable
我明白了。
PG::UndefinedTable: ERROR: relation "reviewables" does not exist LINE 8: WHERE a.attrelid = '"reviewables"'::regclass ^
谢谢你的帮助。
找到了--父类 Reviewable
丢失 self.abstract_class = true
标志,如果没有这个标志,Rails会认为它应该映射到db表,但在这种情况下,它应该映射到子类的表名。如果没有这个标志,Rails 会认为它应该映射到 db 表,但在这种情况下,它应该映射到子类的表名。