复制与各协会和回形针附件的导轨对象(Duplicate a rails object with as

2019-09-19 09:20发布

我有几个关联的对象。 一些相关的对象都存储在S3回形针,附件。 如果我复制对象和关联它工作正常,但附件不重复。

在这里,这工作没有得到的图片:

copy_salon = @salon.dup 
copy_salon.about_us_versions = @salon.about_us_versions.collect{|about_us| about_us.dup}

我试图让这样的图像链接:

copy_salon = @salon.dup 
copy_salon.about_us_versions = @salon.about_us_versions.collect{|about_us| 
                                                                  about_us_dup = about_us.dup
                                                                  if about_us.about_us_image then about_us_dup.about_us_image = about_us.about_us_image end
                                                                  if about_us.team_image then about_us_dup.team_image = about_us.team_image end
                                                                  about_us_dup
                                                                }

但后来我收到错误“不能转换成零字符串”,可能是因为不是所有的图像设置。

Answer 1:

得到它,而不是优雅,但工作。 我曾希望DUP会重复我的对象,具有ALL协会和附件。 是不是有任何宝石?

copy_salon = @salon.dup 
copy_salon.about_us_versions = @salon.about_us_versions.collect{|about_us| 
                                                                  about_us_dup = about_us.dup
                                                                  unless about_us.about_us_image.url == "/about_us_images/original/missing.png" then about_us_dup.about_us_image = about_us.about_us_image end
                                                                  unless about_us.team_image.url == "/team_images/original/missing.png" then about_us_dup.team_image = about_us.team_image end
                                                                  about_us_dup
                                                                }


Answer 2:

我把它简单的通过覆盖dup ,至少回形针附件:

def dup
  duplicate = super

  # attachment_definitions is defined if model has paperclip attachments
  return duplicate unless self.class.respond_to?(:attachment_definitions)

  duplicate.tap do |d|
    self.class.attachment_definitions.keys.each do |name|
      d.send("#{name}=", send(name)) if send(name).exists?
    end
  end
end

它可以像这样来定义ApplicationRecord所以从它的每一个模型的好处。



文章来源: Duplicate a rails object with associations and paperclip attachments