Ruby Rails 3.2 URL中包含folder_name路径的Locale

时间:2013-09-05 18:48:24

标签: ruby ruby-on-rails-3 rails-routing

我有三个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;建议!

2 个答案:

答案 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正常工作。