2010-10-22 47 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來調用內部方法,否則您的應用程序將來可能無法使用。