如何设置这种多态关系?

问题描述 投票:0回答:1

表。(只包括相关列)

  • 用户: 身份证
  • 评论: 身份证, 用户ID, 可审查类型, 可审查的ID
  • 主题_一: 身份证
  • 主题_二: 身份证

模型。(这是我试过的型号)

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_onessubject_twos 不会真正改变,用户可以选择从每个表中包含行。这两张表的不同之处在于它们需要不同的表,但评论本身的数据模型是一样的。对于不同的类型,对用户的显示也会不同。reviews 是唯一的,在 user_id, reviewable_typereviewable_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 ^

谢谢你的帮助。

ruby-on-rails polymorphic-associations ruby-on-rails-6
1个回答
0
投票

找到了--父类 Reviewable 丢失 self.abstract_class = true 标志,如果没有这个标志,Rails会认为它应该映射到db表,但在这种情况下,它应该映射到子类的表名。如果没有这个标志,Rails 会认为它应该映射到 db 表,但在这种情况下,它应该映射到子类的表名。

© www.soinside.com 2019 - 2024. All rights reserved.