相关疑难解决方法(0)

如何避免运行ActiveRecord回调?

我有一些具有after_save回调的模型.通常这很好,但在某些情况下,比如在创建开发数据时,我想保存模型而不运行回调.有一个简单的方法吗?类似于......的东西

Person#save( :run_callbacks => false )
Run Code Online (Sandbox Code Playgroud)

要么

Person#save_without_callbacks
Run Code Online (Sandbox Code Playgroud)

我查看了Rails文档但没有找到任何内容.但是根据我的经验,Rails文档并不总是讲述整个故事.

UPDATE

我发现了一篇博文,解释了如何从这样的模型中删除回调:

Foo.after_save.clear
Run Code Online (Sandbox Code Playgroud)

我找不到该方法的记录,但似乎有效.

ruby ruby-on-rails rails-activerecord

137
推荐指数
10
解决办法
10万
查看次数

Rails 3跳过验证和回调

我有一个特别复杂的模型,其中定义了验证和回调.业务需求现在需要一个特定的场景,添加新记录需要跳过验证和回调.最好的方法是什么?

activerecord ruby-on-rails ruby-on-rails-3

70
推荐指数
3
解决办法
7万
查看次数

如何在不运行Rails中的回调的情况下保存模型

我需要在Rails中保存模型时计算值.所以我称之为calculate_averages一个Survey类的回调:

before_save :calculate_averages
Run Code Online (Sandbox Code Playgroud)

但是,偶尔(最初我有10k记录需要此操作)我需要手动更新每条记录的所有平均值.没问题,我有以下代码:

Survey.all.each do |survey|
  survey.some_average = (survey.some_value + survey.some_other_value) / 2.to_f
  #and some more averages...
  survey.save!
end
Run Code Online (Sandbox Code Playgroud)

在运行这段代码之前,我担心calculate_averages它会被调用并复制它,甚至可能会导致我正在做的事情出现问题.好吧,那么我想,好吧,我只是什么也不做,让我们calculate_averages打电话来做它的事.问题是,首先,即使您没有对记录进行任何更改,有没有办法强制回调被调用?

其次,平均的方式计算这是远远更有效率根本就没有让回调被调用的一切,做的一切平均值的一次.这可能不会让回调被调用吗?

activerecord ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 rails-activerecord

24
推荐指数
6
解决办法
4万
查看次数

如何跳过Mongoid文档的回调?

我的问题类似于这个如何跳过ActiveRecord回调?但是我使用Mongoid而不是AR,似乎在当前版本的Mongoid中尚未实现,所以我想知道应该是一个优雅的解决方案来实现它.(如有必要).

ruby activerecord ruby-on-rails mongoid

20
推荐指数
3
解决办法
1万
查看次数

如何更新after_save中的属性而不会导致rails 2.3中的递归?

我有一个模型,附有Paperclip的视频.保存后,我使用保存的视频生成缩略图.我需要在每次保存后执行此操作,即使尚未上传新视频,因为用户可以更改捕获缩略图的时间.

我目前正在使用after_post_process来执行此操作,但它只会在上传文件时生成缩略图(这是回调,它是Paperclip的一部分).

理想情况下我会使用这样的after_save回调:

after_save :save_thumbnail
def save_thumbnail
  #generate thumbnail...
  self.update_attributes(
    :thumbnail_file_name => File.basename(thumb), 
    :thumbnail_content_type => 'image/jpeg'
  )
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,update_attributes调用save,然后调用before_save回调导致无限循环.是否有一种简单的方法来规避这种行为?

ruby-on-rails callback save ruby-on-rails-2

14
推荐指数
3
解决办法
1万
查看次数