0

问题
有一些模型应该作为模板复制。
例如:有一个新闻条目,我想将它复制到几个组。
所以复制的元素应该与模板有关联。并且模板应该与它的元素有关联。

当前状态
因为有几个模型具有与可复制元素相同的方法,所以我提出了一个问题。我尝试使用动态关联名称链接到自身的类,但是当我创建一个元素时,出现了 Missmatch 错误。

item = self.class.find_or_create_by(group: group, group_template: self)
ActiveRecord::AssociationTypeMismatch: Class(#18118120) expected, got News(#140451780)

关注中的协会

included do
  belongs_to :business_group
  belongs_to :group_template, class_name: self.class.name, foreign_key: :template_id
  has_many :group_elements, class_name: self.class.name, foreign_key: :template_id
end

是否有动态解决方案,或者我应该将其从关注点中删除并将其复制到所有模型?

4

1 回答 1

1

在您的includedself中是包含的类。self.class_name可能是你想要的。self.class.class_name是您所拥有的并且正在要求模型类的类,即Class.

您真正应该使用的唯一时间self.class是当您处于类实例的范围内并且需要访问该实例对象的类时。在您包含的块中,您已经在类上下文中,因此.class正在询问类的类。

元编程可能会让人感到困惑。希望这是有道理的。

于 2018-04-02T22:03:32.947 回答