我已经从我的Rails 3.2.13应用程序中删除了gem routing-filter,准备将其升级到Rails4。作者有一个Rails 4的beta版本,但我无法使其正常工作。我已经实施了用于本地化/国际化的常规Rails流程。我需要解决的最后一个问题是在邮件视图中显示线程的link_to语句。
[当我使用路由过滤器时,我具有link_to语句,如下所示,根据环境我在邮件程序中设置了@host。
<%= link_to "#{t :view_thread}", micropost_url(@item), host: "#{@host}" %>
当我卸载路由过滤器时,由于尝试发送电子邮件而缺少语言环境,因此开始出现错误。它将崩溃,并将应用程序发送回登录页面。宝石照顾了这个。
我已经搜索了大约一个小时,试图为此找到正确的语法,但是我没有找到任何包含host和locale参数的示例。我已经尝试了几次猜测,但是语法错误。
任何帮助将不胜感激。我将继续搜索并尝试。
这是我想出的解决方案。我不确定locale子句应该和host子句相关。我决定尝试下面的陈述,它奏效了。
<%= link_to "#{t :view_thread}", micropost_url(@item, locale: I18n.locale.to_s), host: "#{@host}" %>
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
var进行后备,因此沿以下方向很模糊:@locale = @user.locale || I18n.default_locale