2017-11-25 2 views
0

Ich habe verschiedene Sprachen in meiner App und ich verwende dieses Muster: /:locale/some-action. Die meisten meiner Routen sind in diesem Bereich :locale - routes.rb:URL entfernen GET Parameter für Locale Rails 5

scope "(:locale)", locale: /fr|en/ do 
    root to: 'home#index' 
    get 'contacts', to: 'contacts#index' 
end 
get 'about', to: 'about#index' 

, aber einige von ihnen sind es nicht. Für Routen, die in diesem Bereich :locale sind, generiert Rails, wenn ich ihre Namen wie contacts_path verwende, die Route abhängig vom Gebietsschema. Wenn es :fr ist, wird die generierte Route /fr/contacts sein.

Für Routen, die nicht in diesem Bereich liegen. Für das Beispiel about. Wenn ich den Namen about_path und das Gebietsschema :fr verwende, wird die generierte URL /about?locale=fr sein, aber das möchte ich nicht.

Dies ist application_controller.rb:

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_action :set_locale 

    private 
    def set_locale 
    I18n.locale = params[:locale] || I18n.default_locale 
    end 

    def default_url_options(options={}) 
    { :locale => I18n.locale == I18n.default_locale ? nil : I18n.locale } 
    end 
end 

Was ist der Weg, um diese GET-Parameter zu entfernen, aber immer noch Routen verwendet, die :locale mit ihren Namen in Umfang und generierte URLs auf :locale abhängt?

Antwort

0

Ich fand eine Lösung. In meinen Ansichten:

<%= link_to 'About', about_path(locale: nil) %>