Ruby on rails Rails在创建子模型时发送模型更新电子邮件

Ruby on rails Rails在创建子模型时发送模型更新电子邮件,ruby-on-rails,controller,actionmailer,Ruby On Rails,Controller,Actionmailer,所以我有两个模型: class ModelA < ActiveRecord::Base has_many :model_b end class ModelB < ActiveRecord::Base belongs_to :model_a end 如果经过编辑: if @model_a.update(model_a_params) Emailer.delay.edit_model_a(@model_a.id) 但是,如果编辑是创建modelB对象

所以我有两个模型:

class ModelA < ActiveRecord::Base
    has_many :model_b
end

class ModelB < ActiveRecord::Base
    belongs_to :model_a
end
如果经过编辑:

if @model_a.update(model_a_params)
        Emailer.delay.edit_model_a(@model_a.id)
但是,如果编辑是创建modelB对象,则不会发送编辑电子邮件。如果编辑了modelA拥有的modelB,但如果创建了modelB,则不会发送


我将如何改变这种行为

通常,您可以使用模型回调来实现这一点。您不需要在控制器上调用mailer方法,但可以在after_create/after_save/after_update钩子中调用

classmodela
我在考虑这个问题,但是如果我创建两个不同的modelB呢?我仍然只想发送一封电子邮件,以避免垃圾邮件等。这将是一个更复杂的一点,因为modelb的不知道彼此在后_创建。如果调用,您可以覆盖ModelA中的
model_bs_attributes
,以设置虚拟属性(attr_accessor),如果设置了该属性,则可以在after_update/after_save hook中发送邮件。或者类似这样的情况:
if @model_a.update(model_a_params)
        Emailer.delay.edit_model_a(@model_a.id)
class ModelA < ActiveRecord::Base
  after_create { |instance| Emailer.delay.new_model_a(instance.id) }
  after_update { |instance| Emailer.delay.edit_model_a(instance.id) }
end

class ModelB < ActiveRecord::Base
   after_create { |instance| Emailer.delay.new_model_b(instance.id) }
end