Я работаю на 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()
; к сожалению, с такими короткими и часто встречающимися строками, как короткие короткие коды, вероятно, не слишком мудрый.
Хороший трюк, я закончил тем, что написал: def def_path (options = {}); options = request.params.symbolize_keys.merge (опции); url_for Rails.application.routes.recognize_path (request.path) .merge (опции) end', который был переполнен! –