2013-10-28 27 views
0

我的模型有一個'url'虛擬參數,鏈接上有大量數據。同一個模型有一個回形針附件:所以當創建一個新的實例時,它可以包含對象應該下載它的附件或url-string數據。我想封裝了所有的檢查,如果它是基於URL的數據或從控制器原料之一:如何在更改虛擬屬性時關閉回調?

@music = @order.build_music(params[:soundtrack]) 
if @music.save 
    format.html { redirect_to edit_order_path(@order) } 
    format.js 
else 
    format.html {render :action => 'new'} 
    format.js 
end 

我希望我的音樂模式檢查,如果有一個網址的虛擬參數設置,如果這樣下載它異步:

has_attached_file :soundfile 

after_save :check_if_url 

def self.downloadSoundtrack(id, url) 
    find(id).update_column(:soundfile, open(url)) 
end 

private 
    def check_if_url 
     if self.url.present? 
      Soundtrack.delay.downloadSoundtrack(self.id, self.url) 
     end 
    end 

但update_column不虛參數工作,我不能用保存「因爲它會recusivelly火after_save的回調。 Plz,幫助,夥計!

回答

0

試試這個,這將不會觸發回調

Model.where(id: id).update_all(soundfile: open(url)) 
+0

只是爲了清除此事:soundfile不是數據庫字段 - 它是由paperclip虛擬屬性創建的。所以我不認爲update_all會工作 –

0

API Docs :上save驗證過程可以通過傳遞validate: false被跳過。

+0

是的,沒錯。 *驗證*將被跳過,但我需要after_save回調被跳過 –