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