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

如何在Ruby on Rails 7邮件器中传递动态作用域参数?

解决Rails邮件器中current_account路由参数缺失的问题

问题原因

邮件器继承自ActionMailer::Base,而非ApplicationController,所以控制器中重写的url_options逻辑不会被邮件器继承。生成邮件内的路由链接时,无法自动获取current_account参数,从而触发possible unmatched constraints: [:current_account]错误。

解决方案

1. 给邮件器添加url_options重写

修改你的ApplicationMailer,添加和控制器一致的url_options方法,同时确保邮件器实例能获取到current_account参数:

class ApplicationMailer < ActionMailer::Base
  default from: 'your-email@example.com'
  layout 'mailer'

  def url_options
    { current_account: @current_account }.merge(super)
  end
end

2. 调用邮件时传入current_account

在触发邮件的地方(控制器、后台任务等),必须将current_account作为参数传入邮件方法,并赋值给邮件器的实例变量:

比如在控制器中调用:

# 示例控制器动作
def send_client_notification
  @client = Client.find(params[:id])
  # 传入当前账户参数
  ClientMailer.client_alert(@client, @current_account).deliver_later
end

对应的邮件器实现:

class ClientMailer < ApplicationMailer
  def client_alert(client, current_account)
    # 赋值给实例变量,供url_options使用
    @current_account = current_account
    @client = client
    mail(to: client.email, subject: '客户提醒')
  end
end

3. 非请求环境下的处理

如果是在后台任务(如Sidekiq)、rake任务等无请求上下文的场景发送邮件,同样需要手动传入current_account参数,确保邮件器实例能获取到该值,避免路由生成失败。

内容的提问来源于stack exchange,提问作者Tintin81

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:45:35