@Fly3110
web developer

Возможно ли использовать вычисляемые значениея в routes.rb?

Всем привет!

У меня есть такая запись в роутинге:
get ':name/preview_:time.jpg' => 'controller#action', as: 'video_preview', name: /[^\/]+/


если я во view вызываю
url_for video_preview_path(name: @view[:file_name], time: File.mtime(@view[:file_name]))

, то все ок. Получаю ссылку вида 1.mp4/preview_ 1426372655.jpg

но я не хочу постоянно использовать два параметра, один из которых всегда зависит от другого.
я хочу в роутинге прописать что-то типа defaults: {time: File.mtime(name)}
но так не срабатывает, так как переменная name не определена.

Есть ли простой выход из этой ситуации?

Спасибо!
  • Вопрос задан
  • 234 просмотра
Решения вопроса 1
@vsuhachev
def my_video_preview_path(file_name)
  url_for video_preview_path(name: file_name, time: File.mtime(file_name))
end


Ну а если нужна настоящая уличная магия, то поглядите на функцию alias из библиотеки руби
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@thepry
Ruby on rails, 1С разработчик
Я не нашел нормального способа, однако, рельсы умеют передавать хэш параметров в redirect и там есть доступ к ним. Поэтому можно написать что-то вроде:
get ':name/preview_:time.jpg' => 'controller#action', as: 'video_preview', name: /[^\/]+/
get ':name' => redirect {|params| "/#{params[:name]}/preview_#{File.mtime(params[:name])}.jpg"}


Хотя все это костыли.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы