当我使用带有区域设置参数的范围时:
MyApp::Application.routes.draw do
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
resources :users
...
end
mount MyEngineApp::Engine => "/engineapp"
end
并在我的引擎中:
MyEngineApp::Engine.routes.draw do
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
...
end
end
我有这样的网址:
http://domain.tld/en/users
和
http://domain.tld/engineapp/en
我想为我的引擎设置网址:
http://domain.tld/en/engineapp
我可以通过从引擎路由中删除范围并执行以下操作来完成此操作:
MyApp::Application.routes.draw do
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
resources :users
...
mount MyEngineApp::Engine => "/engineapp"
end
end
但是,如果我这样做,我的链接看起来像:
http://domain.tld/en/engineapp?locale=fr
所以我的问题是,如何将引擎传递给引擎的根路由,因为我认为问题就在这里。
这是我的基础ApplicationController:
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
# before_filter :set_default_url_options
before_filter :set_locale
def default_url_options(options={})
{
host: Rails.application.config.action_mailer.default_url_options[:host],
locale: I18n.locale
}
end
protected
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
end
我的Engine ApplicationController:
module MyEngineApp
class ApplicationController < ::ApplicationController
before_filter :authenticate_user!
end
end
感谢的
答案 0 :(得分:0)
它正在使用:
def url_options(options={})
{
host: Rails.application.config.action_mailer.default_url_options[:host],
locale: I18n.locale
}
end
而不是default_url_options。