ruby 关联中的动态 class_name

Dynaimc class_name in ruby-association

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

当前状态
因为有几个模型具有与可复制元素相同的方法,所以我产生了一个顾虑。我已经尝试将 link 的动态关联名称与其自身的 class 关联,但是当我创建一个元素时,会出现不匹配错误。

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

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

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

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

Meta-programming 可能会让人感到困惑。希望这是有道理的。