Rails邮件器在控制器正常运行,模型回调调用时报错
解决模型回调中调用邮件器出现undefined method的问题
嘿,这个问题的根源其实很简单——你在模型的回调方法里用错了对象引用!
先看你原来的控制器代码,是完全没问题的:
def create @poll = Poll.new(poll_params.merge(user: current_user)) if @poll.save PollMailer.created_poll_email(@poll).deliver_now # ... 其他逻辑 end end
因为在控制器里你明确定义了实例变量@poll,指向刚创建的Poll对象,所以邮件器能正常拿到参数。
但到了模型的回调方法里:
after_save :send_email def send_email PollMailer.created_poll_email(@poll).deliver_now end
这里的@poll根本不存在!模型的实例方法中,当前的Poll对象是用self来指代的,而不是@poll(这个变量只在你之前的控制器里有定义)。
所以修正后的模型代码应该是这样:
after_save :send_email def send_email PollMailer.created_poll_email(self).deliver_now end
另外给你个小建议:如果没有特殊的即时发送需求,最好用deliver_later替代deliver_now,这样邮件发送会放到后台队列处理,不会阻塞当前的请求响应,用户体验会更好哦~
内容的提问来源于stack exchange,提问作者catmal
相关产品推荐
相关产品推荐

