2012-07-11 37 views
2

我有一個有多個關聯的對象。其中一些關聯對象在S3中存儲了回形針附件。如果我複製對象和關聯它工作正常,但附件不重複。用關聯和回形針附件複製一個rails對象

這這裏工作沒有得到的圖像:

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 
                   } 

但後來我收到錯誤「不能轉換成零字符串',可能是因爲沒有設置所有圖像。

回答

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 
                   } 
+1

是的,我認爲'Paperclip :: Attachment'目前不知道如何自我複製。你介意捲起袖子並修補它嗎?這絕對有一些功能,我將它合併:) – sikachu 2012-07-12 00:42:17

+0

很想在那裏幫忙,也許在幾個星期內。剛開始使用rails,來自Google的... – 2012-07-17 23:27:08

1

我把它簡單的通過覆蓋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所以從它的每一個模型的好處來定義。