Rails current_path Helper?

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

15
задан Community 23 May 2017 в 12:00
поделиться