0

在我的 Rails 5 应用程序中,我尝试使用ActiveJobSucker Punch发送电子邮件:

# app/controllers/users_controller.rb

class UsersController < ApplicationController

  def activate
    user = User.find_by(:activation_token => params[:id])
    user.activate
    SendFollowUpEmailJob.perform_in(30, user)
    sign_in user
  end

end

# app/jobs/send_follow_up_email.rb

class SendFollowUpEmailJob < ActiveJob::Base
  include SuckerPunch::Job

  queue_as :default

  def perform(user)
    SupportMailer.follow_up(user).deliver_later
  end
end

# app/mailers/support_mailer.rb

class SupportMailer < ApplicationMailer

  layout nil

  default :from => "admin@app.com"

  def follow_up(user)
    @user = user
    mail :to => @user.email, :subject => t('.subject')
  end

end

# app/views/user_mailer/activation.html.erb

<%= link_to(t('views.activate'), activate_user_url(@user.activation_token, :locale => "#{I18n.locale}")) %>

除了电子邮件始终以默认语言环境而不是传递给activate操作的语言环境发送之外,一切正常。

整个应用程序中的所有电子邮件始终在正确的语言环境中发送,因此必须向下发送到ActiveJobSuckerPunch

如果你能帮忙,请告诉我。谢谢。

4

1 回答 1

2

我对应用程序中的 I18n 很熟悉,但在邮件程序中并不熟悉。请记住,邮件是在请求(ActiveJob)之外发送的,因此它不知道那里发生的任何事情。看起来您没有做任何事情来告诉邮件程序它应该在特定的语言环境中发送......

好的,也许这对你(和我!)有答案https://niallburkley.com/blog/localize-rails-emails/

I18n.with_locale(@user.locale) do
  mail(
    to: @user.email,
    subject: I18n.t('user_mailer.new_follower.subject')
  )
end
于 2018-04-20T21:57:03.467 回答