我有三个Ruby / Rails applet在以下设置下运行:
services.mydomain.com/applet1
services.mydomain.com/applet2
services.mydomain.com/applet3
这些是通过Phusion Passenger提供的,App1和App2完全按预期工作。
问题在于App3使用了URL中嵌入的I18n Locales:
services.mydomain.com/applet3/en/
services.mydomain.com/applet3/fr/
services.mydomain.com/applet3/es/
问题似乎是link_to网址似乎不包含“applet3”。所以而不是:
services.mydomain.com/applet3/en/signin
我明白了:
services.mydomain.com/en/signin
......这是不可妥协的。
我的routes.rb看起来像:
Rails.application.routes.draw do
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
resources :users
resources :sessions, only: [:new, :create, :destroy]
match '/signup', to: 'users#new'
match '/signin', to: 'sessions#new'
match '/signout', to: 'sessions#destroy', via: :delete
match '/help', to: 'static_pages#help'
match '/about', to: 'static_pages#about'
root to: "static_pages#home"
end # scope locale
end # Rails.application.routes.draw do
...在app / controllers / application_controller.rb中我有:
before_filter :set_locale_from_params
def url_options
{ only_path: true, locale: I18n.locale }
end
protected
def set_locale_from_params
if params[:locale]
if I18n.available_locales.include?(params[:locale].to_sym)
I18n.locale = params[:locale]
else
flash.now[:notice] = 'Translation not available'
logger.error flash.now[:notice]
end
end
end
...在config / environments / production.rb中我有:
Rails.application.routes.default_url_options[:host] = 'http://services.mydomain.com/applet3/'
EDIT1:添加示例link_to语句
<%= link_to(t(".#{language}"), root_path(locale: language)) %>
/ EDIT1
如果我将App3移动到更“正常”的安排,其中URL路径中没有“folder_name”,一切正常。所以我很想知道如何设置范围或URL选项。
提前感谢任何帮助&amp;建议!
答案 0 :(得分:0)
如何在路线中使用约束来定义子模块路线?
Rails.application.routes.draw do
constraints(:host) do
scope :path => ":locale" , locale: /#{I18n.available_locales.join("|")}/ do
resources :users
resources :sessions, only: [:new, :create, :destroy]
match '/signup', to: 'users#new'
match '/signin', to: 'sessions#new'
match '/signout', to: 'sessions#destroy', via: :delete
match '/help', to: 'static_pages#help'
match '/about', to: 'static_pages#about'
root to: "static_pages#home"
end # scope locale
end # constraints
end # Rails.application.routes.draw do
答案 1 :(得分:0)
您正在使用root_path并期望添加applet3,在执行rake路由时,您是否检查了root的路径是什么?
您可能必须在路由文件中明确设置根路径,以使routes_path正常工作。