【问题标题】:How to set up this polymorphic relationship?如何建立这种多态关系?
【发布时间】:2020-04-27 02:14:31
【问题描述】:

表格:(仅包括相关列)

  • 用户id
  • 评论iduser_idreviewable_typereviewable_id
  • subject_onesid
  • subject_twosid

模型:(这是我尝试过的)

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 中的行不会真正改变,用户可以选择包括每个行。这两个表差异很大,以至于它们需要不同的表,但评论本身的数据模型是相同的。对于不同的类型,对用户的显示也会有所不同。 reviewsuser_idreviewable_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】:

    想通了 - 父类 Reviewable 缺少 self.abstract_class = true 标志。如果没有这个,Rails 假设它应该映射到一个 db 表,但在这种情况下它应该映射到子类的表名。

    【讨论】:

      猜你喜欢
      • 2014-08-13
      • 2020-06-28
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多