如何在更改虚拟属性时关闭回调?

时间:2013-10-28 09:07:10

标签: ruby-on-rails activerecord callback paperclip

我的模型有一个'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

我希望我的音乐模型检查是否设置了url虚拟参数,以及是否以异步方式下载它:

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不能用于虚拟参数,我不能使用save'cuz它将会重新启动after_save回调。 Plz,帮忙,伙计们!

2 个答案:

答案 0 :(得分:0)

试试这个,它不会触发回调

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

答案 1 :(得分:0)

API Docs :传递save可以跳过validate: false上的验证过程。