Подтвердить что ты не робот

Rails current_path Помощник?

Я работаю над приложением Rails 3.2 со следующими условиями маршрутизации:

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 предлагает только использование sub(); к сожалению, с такими короткими и часто встречающимися строками, как короткие короткие коды, вероятно, не слишком мудры.

4b9b3361

Ответ 1

Если вы используете область :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

Ответ 2

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