代码之家  ›  专栏  ›  技术社区  ›  Archer

ruby关联中的Dynaimc class\u名称

  •  0
  • Archer  · 技术社区  · 6 年前

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

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

    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
    

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Carl Zulauf    6 年前

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

    你唯一应该使用的时间 self.class 在类的实例范围内,需要访问该实例对象的类时。在包含的块中,您已经在类上下文中,因此 .class 是一个班级中的一个班级。

    元编程可能会有点混乱。希望这是有意义的。