【问题标题】:Duplicate a rails object with associations and paperclip attachments使用关联和回形针附件复制 rails 对象
【发布时间】:2012-07-11 23:40:29
【问题描述】:

我有一个具有多个关联的对象。其中一些关联对象具有存储在 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
                                                                }

然后我收到错误“无法将 nil 转换为字符串”,可能是因为并非所有图像都已设置。

【问题讨论】:

    标签: ruby-on-rails paperclip dup


    【解决方案1】:

    知道了,不是很优雅,但很有效。我曾希望 dup 能用所有关联和附件复制我的对象。没有任何宝石吗?

    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
                                                                    }
    

    【讨论】:

    • 是的,我认为Paperclip::Attachment 目前不知道如何复制自己。你介意卷起袖子修补一下吗?这绝对是我将其合并的一些功能:)
    • 很想在这方面提供帮助,也许在几周内。刚从 Rails 开始,来自 google get...
    【解决方案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 中这样定义,因此每个模型都可以从中受益。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      相关资源
      最近更新 更多