Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:在保存之前添加数据而不触发_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails:在保存之前添加数据而不触发

Ruby on rails Rails:在保存之前添加数据而不触发,ruby-on-rails,Ruby On Rails,我在一个表中转储一些事务数据 我有一个交易模型。 其中有一个before_save,我通过信用卡网关处理交易,并使用结果填写交易模型中的其余字段 我有一个事务观察器在监视,当它看到一个新的事务时会发出通知。然后,它尝试使用update_属性将该尝试的结果保存到事务中 这会导致无限循环,这并不奇怪,因为观察者会在我们开始之前和之后触发保存 有没有一种方法可以更新事务记录中的一个或两个属性而不触发before_save回调?是否是将通知结果移动到另一个表的唯一解决方案?快速且未经测试,但我使用的基本

我在一个表中转储一些事务数据

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

我有一个事务观察器在监视,当它看到一个新的事务时会发出通知。然后,它尝试使用update_属性将该尝试的结果保存到事务中

这会导致无限循环,这并不奇怪,因为观察者会在我们开始之前和之后触发保存


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

快速且未经测试,但我使用的基本方法是允许回调上有一个条件。条件可以是你想要的任何东西

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
class ModelWithCallback:是否需要更新?
私有的
def更新内容
##你的回拨码
结束
需要def更新吗?
!(已更改。任何?{|字段|字段==“名称”| |字段==“地址”)
结束
结束

快速且未经测试,但我使用的基本方法是在回调上允许一个条件。条件可以是您想要的任何东西

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
class ModelWithCallback:是否需要更新?
私有的
def更新内容
##你的回拨码
结束
需要def更新吗?
!(已更改。任何?{|字段|字段==“名称”| |字段==“地址”)
结束
结束

您可以使用私有的ActiveRecord方法:

update_without_callbacks
因为它是私有的,所以您需要使用send

transaction.send(:update_without_callbacks)

您可以使用私有的ActiveRecord方法:

update_without_callbacks
因为它是私有的,所以您需要使用send

transaction.send(:update_without_callbacks)

太棒了!我不确定经常使用它是一个好主意,但它在这里确实有效。谢谢!这可能是在控制台上需要使用的东西,但我不知道在代码中使用它是否是一个好主意。太棒了!我不确定经常使用它是一个好主意,但它在这里确实有效。谢谢!这是可能使用的东西在控制台上有必要使用d,但我不知道在代码中使用它是否是个好主意。