Я пытаюсь вставить локаль в начале URI запроса в приложении Rails 3.1, если оно отсутствует.Я создал скрипт Ruby, который делает то, что я хочу:
uri = "/products"
re = /\A\/((?:[a-z]{2,2})(?:[-|_](?:[A-Z]{2,2}))?)(\/.*)\Z/
unless uri =~ re
uri = "/en#{uri}"
end
puts uri
Итак, если URI запроса равен /en-GB/products
(локаль уже присутствует), он ничего не делает.Если это /products
(как в примере выше), оно выплевывает /en/products
.
Теперь я пытаюсь заставить его работать в моем файле маршрутов.Вот что я пытался сделать:
match "(*all)", :to => redirect do |params, request|
uri = request.path_info
re = /\A\/((?:[a-z]{2,2})(?:[-|_](?:[A-Z]{2,2}))?)(\/.*)\Z/
unless uri =~ re
uri = "/en#{uri}"
end
"#{request.scheme}://#{request.host_with_port}#{uri}"
end
Моя проблема в том, что я даже не могу попасть внутрь блока матча.Я продолжаю получать ArgumentError: redirection argument not supported
.
Я пытался изменить его на match "(*all)" => redirect do |params, request|
безрезультатно.
Я смотрю на документацию по Rails 3.1 API для этих примеров.
Является ли файл маршрутов местом, где можно попробовать это сделать?Для меня это имеет смысл.