需要在Mailer视图中添加区域设置到link_to语句

时间:2013-10-16 14:49:02

标签: ruby-on-rails ruby-on-rails-3 locale host link-to

我已经从我的Rails 3.2.13应用程序中删除了gem routing-filter,准备将其升级到Rails 4.作者有一个Rails 4的测试版,但我永远无法让它工作。我已经实现了用于本地化/国际化的正常Rails过程。我需要解决的最后一个问题是link_to语句,它在邮件程序视图中显示一个线程。

当我使用路由过滤器时,我有如下所示的link_to语句,我根据环境在邮件程序中设置了@host。

<%= link_to "#{t :view_thread}", micropost_url(@item), host: "#{@host}" %>

当我卸载路由过滤器时,由于在尝试发送电子邮件时缺少语言环境,我开始收到错误。它崩溃并将应用程序发送回登录页面。宝石负责这件事。

我一直在寻找大约一个小时试图找到正确的语法,但我找不到包含主机和语言环境参数的任何示例。我已经尝试了几次猜测,但是我遇到了语法错误。

任何帮助将不胜感激。我会一直在寻找和尝试。

2 个答案:

答案 0 :(得分:5)

这是我提出的解决方案。我不确定locale子句应该与host子句相关联。我决定尝试以下声明并且它有效。

<%= link_to "#{t :view_thread}", micropost_url(@item, locale: I18n.locale.to_s), host: "#{@host}" %>

答案 1 :(得分:0)

Rails 6(可能还有5)的更新解决方案。

首先,请确保您已按照Rails指南进行本地化,因此一切都已设置

然后,将其添加到您的ApplicationMailer

  def default_url_options(options = {})
    ActionMailer::Base.default_url_options
      .merge(locale: I18n.locale)
      .merge(options)
  end

这将使用您选择的语言环境来生成链接,因此您不必每次都通过locale: @locale

然后,使用以下代码块在邮件程序中设置当前区域设置。

    I18n.with_locale(@locale) do
      mail(to:      @email,
           subject: I18n.t("mailers.my_mailer.subject"))
    end

最后一条建议-不要忘记使用您的@locale变量,因此请遵循以下原则:@locale = @user.locale || I18n.default_locale

更新:

或者您可以简单地使用mail方法进行猴子补丁,但是请确保您知道自己在做什么。

  def mail(**)
    I18n.with_locale(@locale || I18n.default_locale) { super }
  end