2012-06-06 3 views
12

Я работаю на 3.2 приложения Rails со следующими условиями проводки:Rails current_path Помощник?

scope "(:locale)", locale: /de|en/ do 
    resources :categories, only: [:index, :show] 
    get "newest/index", as: :newest 
end 

Я контроллер со следующим:

class LocaleController < ApplicationController 
    def set 
    session[:locale_override] = params[:locale] 
    redirect_to params[:return_to] 
    end 
end 

Я использую это с чем-то вроде этого в шаблоны:

= link_to set_locale_path(locale: :de, return_to: current_path(locale: :de)) do 
    = image_tag 'de.png', style: 'vertical-align: middle' 
    = t('.languages.german') 

Я задаюсь вопросом, почему не существует помощника в Rails, таких как current_path, то которое в состоянии сделать вывод, какой маршрут мы в настоящее время используем и перенаправляем к нему новые параметры.

Проблема у меня есть что-то вроде redirect_to :back, один отталкивает пользователя обратно до /en/........ (или /de/...), что делает для дерьмового опыта.

До сих пор я сохранял языковой стандарт в сеансе, но это не будет работать для Google и других служб индексирования.

Я уверен, что если бы у меня было достаточно времени, я мог бы кое-что сделать достаточно умным, чтобы определить, какой маршрут согласован, и заменить локальную часть, но я чувствую, что это будет взломать.

Я открыт для всех мыслей, но это SO question предлагает только использовать sub(); к сожалению, с такими короткими и часто встречающимися строками, как короткие короткие коды, вероятно, не слишком мудрый.

ответ

24

Если вы используете :locale сферу, вы можете использовать url_for в current_path:

# Given your page is /en/category/newest with :locale set to 'en' by scope 

url_for(:locale => :en) # => /en/category/newest 
url_for(:locale => :de) # => /de/kategorie/neueste 
+3

Хороший трюк, я закончил тем, что написал: def def_path (options = {}); options = request.params.symbolize_keys.merge (опции); url_for Rails.application.routes.recognize_path (request.path) .merge (опции) end', который был переполнен! –

3

В случае, если кто смотрит здесь, вы можете использовать request.fullpath, которые должны дать вам все после того, как имя домена и, следовательно, будет включать в себя региональные настройки ,

Смежные вопросы