You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:21:57