2016-01-13 99 views
0

我试图在电子邮件地址更改时发送电子邮件通知。要做到这一点,我需要首先检测属性是否真的改变。我认为添加代码的最佳位置是在控制器中的after_filter如何检查属性更改并在rails中触发回调

# app/controllers/users_controller.rb 
after_filter :email_change_notification, only: [:update] 

def email_change_notification 
    UserMailer.notify_new_email if @user.email_changed? 
end 

我现在的问题是,电子邮件email_changed?不会在此上下文中返回预期值。它始终是false。作为替代方案,我能做到这一点的模型after_save

# app/models/user.rb 
after_save :email_change_notification 

def email_change_notification 
    UserMailer.notify_new_email if email_changed? 
end 

这工作,但我认为前者是一个更好的方法,因为调用邮件是不是模型的责任的一部分。

我的问题是:

(1)我应该在哪里把这样的回调(模型或控制器)?

(2)有没有更好的方法来使控制器的方法工作?

(3)有没有比提到的更好的方法?

回答

相关问题