首页 > 解决方案 > Rails:重复记录,一些关联,仅其他连接表

问题描述

我有一个有很多 HABTM 关联的父类。我想复制父类及其关联,复制HABTM 关联的连接表,这样这些记录本身就不会被复制。

class Brand < ApplicationRecord
  has_many :prices, autosave: true, dependent: :destroy

  has_one :preference

  has_and_belongs_to_many :introductions
  has_and_belongs_to_many :components
  has_and_belongs_to_many :covers
  has_and_belongs_to_many :template_categories
end

例如,它将克隆所有原始的、:prices:preference和仅对、、和的引用:introductions:components:covers:template_categories

第一次尝试是基于deep_cloneable,但我无法直接处理连接表。

def duplicate
  brand = deep_clone include: [
    :prices, :preference,
    :brands_introductions, # can't address join table
    # ... etc
  ]
  brand.save!
end

即,我希望克隆品牌引用与原始品牌相同的介绍、组件等。

标签: ruby-on-railsrubyruby-on-rails-5

解决方案


我认为您需要手动完成。创建一些可以完成这项工作的服务。每个关系一个。


推荐阅读