2010-10-22 45 views
2

某些情况下,我不想执行before_update。请帮帮我。保存时忽略before_update

情况A:如果我想使用的before_update

obj = Object.find(id) 
obj.save 

但情况B我不想使用before_update

obj = Object.find(id) 
obj.save # in case I want used before_update 

回答

0

update_without_callbacks和create_without_callbacks是私有方法。这些方法不会调用任何回调。

obj = Object.find(id) 
obj.send(:update_without_callbacks) 

obj = Object.new(:name => 'foo') 
obj.send(:create_without_callbacks) 
+0

很好。谢谢 – khanh 2010-10-22 04:22:02

+1

不要这样做!这些方法是私密的是有原因的。您不应该依赖内部API,否则在内部重构的情况下,您的应用程序将无法工作。 – 2010-10-22 08:05:39

+0

只适用于Rails 2.看看这个[回复](http://stackoverflow.com/questions/1342761/how-to-skip-activerecord-callbacks) – Shadoath 2014-09-23 19:12:25

3

方法#save接受一个哈希选项。跳过验证:

obj.save(:validate => false) 

这是使用公共API跳过验证的文档化方式。不要尝试使用send来调用内部方法,否则您的应用程序将来可能无法使用。