Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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 仅在销毁子记录后执行回调_Ruby On Rails_Callback - Fatal编程技术网

Ruby on rails 仅在销毁子记录后执行回调

Ruby on rails 仅在销毁子记录后执行回调,ruby-on-rails,callback,Ruby On Rails,Callback,它符合我的要求。但这是一个好的解决方案吗?您能推荐一些更好的替代方案吗?您可以在销毁后使用,并将方法放入job.rb中。这将确保在删除子项(作业)时,它将调用父项来更新值 after_save :set_some_data def set_some_data #Do stuff # WARNING: Don't use any method that will trigger an after_save callback. Infinite loop otherwise. self

它符合我的要求。但这是一个好的解决方案吗?您能推荐一些更好的替代方案吗?

您可以在销毁后使用,并将方法放入job.rb中。这将确保在删除子项(作业)时,它将调用父项来更新值

after_save :set_some_data

def set_some_data
  #Do stuff
  # WARNING: Don't use any method that will trigger an after_save callback. Infinite loop otherwise.
  self.update_columns(column_name: calculated_value)
end
类作业

有关更详细的回调,您可以检查和

,但在本例中,假设我销毁父MyTask对象的3个作业,那么此回调将运行3次。它也不会在创建或更新作业时运行,这意味着我仍然需要在保存回调之前执行。这对我来说似乎不是很有效。升级,因为它将完成所需的工作。是的,我与您的情况相同,我使用after_save for create and update,它似乎效率不高(是的,我同意),特别是如果一个父级中有许多作业,但此处的“save transaction”表示如果子级更改,则应直接更新父级,我打开,还想学习这个案例,如果有另一个选项,保存交易和有效,因为我有很多这样的案例
after_save :set_some_data

def set_some_data
  #Do stuff
  # WARNING: Don't use any method that will trigger an after_save callback. Infinite loop otherwise.
  self.update_columns(column_name: calculated_value)
end
class Job < ApplicationRecord
  belongs_to :ownerable, polymorphic: true, optional: true

  after_destroy :update_parent


  def update_parent
    # check your parent model
    self.ownerable.update_columns(column_name: calculated_value)
  end
end