我有两个模型,Article和Post都继承自名为ContentBase的基础模型。
您可以对文章和帖子发表评论,因此我使用评论和文章或帖子之间的多态关联。
但是,由于Article和Post都继承自ContentBase,因此commentable_type字段最终成为两者的“ContentBase”并将所有内容搞砸。
有没有办法在Article和Post中的has_many关系中指定commentable_type字段?
编辑:
通过“搞砸了一切”我的意思是如果有一个ID为1的文章和ID为1的帖子,并且我在commentable_id = 1,commentable_type = ContentBase中添加了一条评论,该评论将显示在文章和交。
以下是代码:
class Article < BaseContent
has_many :comments, :as => :commentable
end
class Post < BaseContent
has_many :comments, :as => :commentable
end
这是我的评论模型:
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
答案 0 :(得分:2)
ContentBase类中有什么?您可以将该代码移动到模块中而不是使用继承吗?
Module BaseContent
def self.included(base)
base.class_eval do
validates_presence_of :somefield
validates_length_of :someotherfield
def my_method
"hello"
end
end
end
end
答案 1 :(得分:1)
我认为你不想这样做。对于多态关联,您希望XXX_type字段是基本模型类,而不是实际类。我不确定原因,但我认为它与确定要从中选择的表名来获取多态数据有关。
我认为您需要查看单表继承,这是ActiveRecord用于在数据库中存储派生类的内容。它假定由于Article和Post是ContentBase的子类,它们都将在同一个表中(默认情况下为“content_bases”)。如果是这种情况,您将永远不会有ID = 1的文章和ID = 1的帖子。
一些参考文献: