更改 devise_invitable 的邮件主题

10
默认情况下,邀请邮件的主题为:
  mailer:
      invitation_instructions:
        subject: 'Invitation instructions'

我想把它改成:
subject: '%{invited_by} has invited you!'

但这需要将 invited_by 变量设置为可在 i18n 的 translate 方法中访问。

我如何使该变量可访问/声明,同时又不会过多地改变默认行为?


抱歉打扰,但是看起来你似乎觉得我的答案不值得你的悬赏,我有点好奇。 你认为答案是错误的,还是不够详细,或者其他什么原因? - Alexis
实际上,我已经点赞了它,并且现在正在检查它是否按预期工作。 - Nick Ginanto
1个回答

35

Devise默认邮件发送器可能无法为您工作,但是设置自定义邮件发送器并在其中定义您自己的“subject_for”助手非常容易:

# in config/initializers/devise.rb:
...
config.mailer = "CustomDeviseMailer"
...
# in app/mailers/custom_devise_mailer.rb:

class CustomDeviseMailer < Devise::Mailer
  protected

  def subject_for(key)
    return super  unless key.to_s == 'invitation_instructions'

    I18n.t('devise.mailer.invitation_instructions.subject', 
      :invited_by => resource.invited_by.try(:full_name) || 'Someone')
  end
end

1
在某个时候,他们将其从字符串更改为符号,因此您可能需要使用 return super,除非 key == :invitation_instructions。 - schpet
此外,我认为这个答案应该被标记为“正确的”,@NickGinanto - kikito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接