当没有传递区域设置时,Mailboxer gem 的邮件结果为 ActionController::UrlGenerationError
Mailboxer gem's mailer results in ActionController::UrlGenerationError when no locale is passed
我正在尝试使用 Mailboxer gem 在我的 Rails 4 应用程序中获取用户到用户的消息传递系统。但是,我在发送消息时在浏览器中收到以下错误:
ActionController::UrlGenerationError in Conversations#create
罪魁祸首行是以下邮件程序模板 (new_message_email.html.erb):
Visit <%= link_to "this page", root_url %> and go to your inbox for more info.
原因是
No route matches {:action=>"index", :controller=>"rooms"} missing required keys: [:locale]
这是因为我的整个应用程序的路由都需要语言环境。我的 routes.rb 看起来像这样:
Rails.application.routes.draw do
get '' => redirect("/#{I18n.default_locale}")
scope "/:locale", locale: /en|ja|ko/ do
root 'rooms#index'
resources :rooms
# ... All my other routes here ...
end
end
有趣的是,控制台出现以下错误(与浏览器中的不同):
ActionView::Template::Error (No route matches {:action=>"index", :controller=>"rooms"} missing required keys: [:locale]):
14: </p>
15: </blockquote>
16: <p>
17: Visit <%= link_to "this page", root_url %> and go to your inbox for more info.
18: </p>
19: </body>
20: </html>
但我认为模板不是问题 - 真正的问题是之前发生的一些调用需要传递区域设置,因此 root_url
失败,因为它不知道哪个区域设置使用。
我已经在 application_controller.rb 中传递了以下内容:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
def default_url_options(options = {})
{ locale: I18n.locale }.merge options
end
end
有谁知道我该如何解决这个问题或如何将语言环境传递给邮寄者的 root_url
?
此外,如果需要更多代码,请告诉我。
提前致谢:)
呸,愚蠢的错误!指定语言环境似乎可以正常工作:
<%= link_to "this page", root_url(locale: :en) %>
尽管理想情况下此设置应取决于用户的首选语言。
我正在尝试使用 Mailboxer gem 在我的 Rails 4 应用程序中获取用户到用户的消息传递系统。但是,我在发送消息时在浏览器中收到以下错误:
ActionController::UrlGenerationError in Conversations#create
罪魁祸首行是以下邮件程序模板 (new_message_email.html.erb):
Visit <%= link_to "this page", root_url %> and go to your inbox for more info.
原因是
No route matches {:action=>"index", :controller=>"rooms"} missing required keys: [:locale]
这是因为我的整个应用程序的路由都需要语言环境。我的 routes.rb 看起来像这样:
Rails.application.routes.draw do
get '' => redirect("/#{I18n.default_locale}")
scope "/:locale", locale: /en|ja|ko/ do
root 'rooms#index'
resources :rooms
# ... All my other routes here ...
end
end
有趣的是,控制台出现以下错误(与浏览器中的不同):
ActionView::Template::Error (No route matches {:action=>"index", :controller=>"rooms"} missing required keys: [:locale]):
14: </p>
15: </blockquote>
16: <p>
17: Visit <%= link_to "this page", root_url %> and go to your inbox for more info.
18: </p>
19: </body>
20: </html>
但我认为模板不是问题 - 真正的问题是之前发生的一些调用需要传递区域设置,因此 root_url
失败,因为它不知道哪个区域设置使用。
我已经在 application_controller.rb 中传递了以下内容:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
def default_url_options(options = {})
{ locale: I18n.locale }.merge options
end
end
有谁知道我该如何解决这个问题或如何将语言环境传递给邮寄者的 root_url
?
此外,如果需要更多代码,请告诉我。
提前致谢:)
呸,愚蠢的错误!指定语言环境似乎可以正常工作:
<%= link_to "this page", root_url(locale: :en) %>
尽管理想情况下此设置应取决于用户的首选语言。