rails has_many 多单table 继承

rails has_many multiple single table inheritance

我有几个基本模型,PostCommentpost 有很多 comment

class Post < ActiveRecord::Base
    has_many :comments
end

class Comment < ActiveRecord::Base
    belongs_to: :post
end

我对这些模型中的每一个都有单一的 table 继承,child 类 没有自己的数据库 table。我在 postscomments table 中有 type 列。

class ChildPost < Post
    has_many :child_comments, class_name: "Comment"
end

class ChildComment < Comment
    belongs_to :child_post, class_name: "ChildPost"
end

现在,如果我创建其中一些 objects

child_comment = ChildComment.create
child_post = ChildPost.create
child_post.child_comments << child_comment
child_post.save

当我 child_post.child_comments 我得到:

PG::UndefinedColumn: ERROR: column comments.child_post_id does not exist

child_post_id 列不存在是正确的(它是 post_id),但是我需要做什么来更正它?

在设计方面,我这样设置是因为 child_commentcomment 的数据相同,但它们的行为略有不同。我希望 ChildComment 仅覆盖 Comment 的某些方法。我希望 commentchild_comment 是可区分的数据库条目。

如果这里有更好的设计,我愿意接受。

您需要在 has_many 关联中同时指定 :class_name:foreign_key

has_many :child_comments, class_name: "Comment", :foreign_key => "post_id"

:foreign_key 选项让您可以直接设置外键的名称。因此,如果您将其设置为 post_id,那么它将起作用,因为 post_id 列存在于 comments table.