在相关模型中的属性更改后运行before_save

圭多

我今天遇到了一些麻烦,无法思考如何解决这个问题。

基本上,我有一个名为Airplane的模型,它有很多付款。每笔付款可以分为许多期。行!

这是信息:

Model Airplane
- has_many payments
- before_save :checks_if_everything_has_been_paid

Model Payment
- belongs_to airplane
- has_many installments

Model Installment
- belongs_to payment

所以,我想做的是当分期付款的总和等于或大于飞机票的价值时,Airplane.paid将为true。我这样做是使用before_save“ checks_if_everything_has_been_paid。但这仅在“飞机”字段发生更改时才有效。

当“付款”和“分期付款”字段都发生更改时,如何运行此类?

我想检查每次更改分期付款或付款本身是否完成付款。

谢谢!

注入

代替after save在Airplane模型上定义after_add回调,而在payments关联定义回调

class Airplane < ActiveRecord::Base
  has_many :payments, after_add: :checks_if_everything_has_been_paid

  def checks_if_everything_has_been_paid
    # work some magic
  end
end

更新:如果我正确理解您的数据模型,我认为以下方法可能是更好的方法。如果保存了付款或分期付款,它将触发飞机检查全额付款:

class Airplane < ActiveRecord::Base
  has_many :payments
  has_many :installments, through: :payments

  def check_for_full_payment
    # work some magic
  end
end

class Payment < ActiveRecord::Base
  belongs_to :airplane
  has_many :installments

  after_save :trigger_full_payment_check

  def trigger_payments_check
    airplane.check_for_full_payment
  end
end

class Installment < ActiveRecord::Base
  belongs_to :payment

  delegate :airplane, to: :payment

  after_save :trigger_full_payment_check

  def trigger_payments_check
    airplane.check_for_full_payment
  end
end

这种方法的好处是,付款和分期付款中的逻辑相同,因此您可以将其提取到模块中:

module TriggerFullPaymentCheck
  def self.included(base)
    base.after_save :trigger_full_payment_check
  end

  def trigger_payments_check
    airplane.check_for_full_payment
  end
end

class Airplane < ActiveRecord::Base
  has_many :payments
  has_many :installments, through: :payments

  def check_for_full_payment
    # work some magic
  end
end

class Payment < ActiveRecord::Base
  include TriggerFullPaymentCheck

  belongs_to :airplane
  has_many :installments
end

class Installment < ActiveRecord::Base
  include TriggerFullPaymentCheck

  belongs_to :payment
  delegate :airplane, to: :payment
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在相关模型中更改属性后运行before_save

来自分类Dev

验证后是否运行before_save?

来自分类Dev

模型before_save中的变量范围

来自分类Dev

具有嵌套属性创建的模型更改了before_validation和before_save之间的关联类型属性

来自分类Dev

如何验证在before_save中更改的数据

来自分类Dev

Before_save不运行滑轨4

来自分类Dev

了解Ruby / Rails中的before_save

来自分类Dev

在before_save中设置参数

来自分类Dev

发布后更改模型中属性的值

来自分类Dev

在Rails before_save方法中大写多个属性

来自分类Dev

Rails-在before_save中获取旧值

来自分类Dev

在before_save回调中修改子记录

来自分类Dev

模型before_save不使用来自参数/控制器的更新的多选顺序

来自分类Dev

Rails:`before_save`会干扰`save?`

来自分类Dev

编写before_save函数以检查所有目标属性的更好方法不是空白吗?

来自分类Dev

Peewee ORM中的before_save()和after_save()挂钩?

来自分类Dev

Peewee ORM中的before_save()和after_save()挂钩?

来自分类Dev

在Django中查询相关的模型属性

来自分类Dev

处理before_save导轨的智能方法

来自分类Dev

回形针,before_save和删除附件

来自分类Dev

before_save,去除字符串

来自分类Dev

Ruby on Rails:before_save字段小写

来自分类Dev

Smart way to handle before_save rails

来自分类Dev

Rails before_save无法正常工作

来自分类Dev

多次创建 before_save 调用

来自分类Dev

Rails 4:如何取消“ before_save”回调中的保存?

来自分类Dev

为什么this before_save无法更新Rails中的验证日期?

来自分类Dev

模型实例上的save()无法更新相关模型端的更改字段

来自分类Dev

多层次模型中的奇相关后轨迹

Related 相关文章

热门标签

归档