创建子模型时,Rails会发送模型更新电子邮件

时间:2014-11-20 23:03:10

标签: ruby-on-rails controller actionmailer

所以我有两个模特:

class ModelA < ActiveRecord::Base
    has_many :model_b
end

class ModelB < ActiveRecord::Base
    belongs_to :model_a
end

创建ModelA时,控制器会发送一封电子邮件:

if @model_aA.save
      Emailer.delay.new_model_a(@model_a.id)

如果已编辑:

if @model_a.update(model_a_params)
        Emailer.delay.edit_model_a(@model_a.id)

但是,如果编辑是创建modelB对象,则不会发送编辑电子邮件。如果编辑了modelA拥有的modelB,则会发送,但如果已创建则不会发送。

我该如何改变这种行为?

1 个答案:

答案 0 :(得分:1)

通常,您可以使用模型回调。您不需要在控制器上调用邮件程序方法,但需要在after_create / after_save / after_update挂钩中调用。

http://apidock.com/rails/ActiveRecord/Callbacks/after_save

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