3

我在以下设置下运行了三个 Ruby/Rails 小程序:

services.mydomain.com/applet1
services.mydomain.com/applet2
services.mydomain.com/applet3

这些是通过 Phusion Passenger 提供的,App1 和 App2 完全按预期工作。

问题在于使用嵌入在 URL 中的 I18n 语言环境的 App3:

services.mydomain.com/applet3/en/
services.mydomain.com/applet3/fr/
services.mydomain.com/applet3/es/

问题似乎是 link_to URL 似乎不包含“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)) %>

/编辑1

如果我将 App3 移动到 URL 路径中没有“folder_name”的更“正常”安排,则一切正常。因此,我在如何设置范围或 URL 选项方面缺少一些简单的东西。

提前感谢您的任何帮助和建议!

4

2 回答 2

0

您正在使用 root_path 并期望添加 applet3,在执行 rake 路由时,您是否检查了 root 的路径是什么?

您可能必须在路由文件中显式设置根路径才能使 routes_path 正常工作。

于 2013-09-17T16:59:26.287 回答
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
于 2013-09-13T14:01:38.607 回答