3

次のセットアップで実行されている 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)) %>

/EDIT1

URL パスに「folder_name」がない、より「通常の」配置に App3 を移動すると、すべて正常に動作します。したがって、スコープまたは URL オプションを設定する方法に欠けているのは簡単なことです。

ヘルプと提案をお寄せいただきありがとうございます。

4

2 に答える 2

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 に答える