Rails の with_locale メソッドでは追加の URL パラメータが許可されないのはなぜですか?
概要
Rails 7 プロジェクトにこのメーラーがあります。
# app/mailers/quote_mailer.rb
class QuoteMailer < ApplicationMailer
def quote_mail(quote)
@quote = quote
@user = quote.user
@client = quote.client
@account = quote.account
I18n.with_locale(@quote.locale) do
mail(
:from => @user.email,
:to => @client.email,
:subject => "New Quote"
)
end
end
end
# app/views/mailer/quote_mail.text.erb
Dear <= @client.name %>
Please click here to download your Quote:
<%= quote_download_url(@quote.token, :namespace => @account.namespace) %>
Best regards
<%= @user.name %>
# config/routes.rb
Rails.application.routes.draw do
scope ':locale', :locale => /#{I18n.available_locales.join("|")}/ do
scope ':namespace' do
resources :quote_downloads, :only => [:show]
end
end
end
残念ながら、メール内のリンクは構築できず、エラーがスローされます。
私の名前空間パラメータが Rails を混乱させているようです。
これはどうすれば修正できますか?
解決策
ロケールがデフォルトの URL オプションとして設定されていない限り、I18n.with_locale が URL にロケールを設定することは期待できません。レンダリングされた電子メールのロケールが変更されることだけを期待します。
ただし、次のようにメーラーで手動で渡すこともできます。
Dear <= @client.name %>
Please click here to download your Quote:
<%= quote_download_url(@quote.token, namespace: @account.namespace, locale: @quote.locale) %>
Best regards
<%= @user.name %>