ruby-on-rails 重复对象,包括关联和ActionText内容

rbl8hiat  于 2022-11-19  发布在  Ruby
关注(0)|答案(1)|浏览(126)

在我的Rails 6应用程序中,我有菜单,它们有页面。页面的“content”属性中有ActionText。

型号/菜单.rb

class Menu < ApplicationRecord
  has_and_belongs_to_many :pages
end

型号/页面.rb

class Page < ApplicationRecord
  has_and_belongs_to_many :menus
  has_rich_text :content
end

我如何复制页面并保留它们的菜单关联和action_text内容?AR 's.dup破坏了关联和内容。deep_clone对AT内容没有任何表示,阿米巴似乎已经死了?
我的东西也有一些active_storage附件btw:)

zsohkypk

zsohkypk1#

看ActiveRecord的dup方法可以得到很好的解释,它只提供“浅”拷贝,因为“深”拷贝的范围是特定于应用程序的。
只需在模型中覆盖dup,以包含您想要的关联。我经常在名称后附加“(copy)”,并清除slugs。
下面是一个示例,可以帮助您入门:

class Page < ApplicationRecord
  has_and_belongs_to_many :menus
  has_rich_text :content

  # Deep duplicate (copy)
  def dup
    super.tap do |duplicate|
      duplicate.attributes = {
        title: title.concat(" (copy)"), # change duplicate's title
        slug: nil, # clear the slug if you're using friendly_id
        content: content.dup,
        menu_ids: menu_ids
      }
    end
  end
end

相关问题