2009-09-24 65 views
0

我有一张表,用于倾销一些交易数据。Rails:在不触发before_save的情况下添加数据

我有一个交易模型。 其中有一个before_save,我通过credit_card网关处理交易,并使用结果填写交易模型中的其余字段。

我有一个Transaction Observer观看它发出一个通知,当它看到一个新的交易。然后它尝试使用update_attribute在TRANSACTION中保存该尝试的结果。

这并不令人惊讶,因为观察者正在触发before_save并在我们周围前进,导致无限循环。

有没有办法更新事务记录中的一个或两个属性而不触发before_save回调?我唯一的解决方案是将通知结果移到另一个表中吗?

回答

2

有一个私人ActiveRecord的方法,您可以使用:

update_without_callbacks 

,因为它是私有的,你需要使用送

transaction.send(:update_without_callbacks) 
+0

惊人!我不确定这是否是一个很好的主意,但它确实可以在这里使用。谢谢! – mikewilliamson 2009-09-25 02:40:29

+1

这是可能用于在控制台上捏的东西,但我不知道在代码中使用它是否好主意。 – nitecoder 2009-09-25 03:12:44

+0

呃,不再工作了。值得一击虽然:-) – 2014-12-04 23:19:34

1

快速和未经测试,但我使用的基本方法是允许在回调条件。条件可以是任何你想要的。

class ModelWithCallback < ActiveRecord::Base 

    before_save :update_stuff, :if => :update_needed? 

    private 
    def update_stuff 
     ## Your callback code 
    end 

    def update_needed? 
     !(changed.any?{ |field| field == "name" || field == "address") 
    end 
end 
相关问题