Как мне реализовать функциональность, аналогичную url_for в Rails, с помощью Clojure и ее веб-фреймворков?

Я разрабатываю веб-приложение с Clojure, в настоящее время с Ring, Усы, Песчаная отмельи Иккинг. У меня есть ресурс с именем jobи маршрут для отображения определенного шага в многошаговой форме для конкретного задания, определенного следующим образом (другие маршруты опущены для простоты):

(def web-app
  (moustache/app
   ;; matches things like "/job/32/foo/bar"
   :get [["job" id & step]
         (fn [req] (web.controllers.job/show-job id step))]))

В представлении мой контроллер рендеринга есть ссылки на другие шаги в рамках того же задания. На данный момент эти URL-адреса создаются вручную, например. (str "/job/" id шага). Мне не нравится эта жестко запрограммированная "/job/"часть URL-адреса, потому что она повторяет то, что я определил в маршруте усов; если я изменю маршрут, мне нужно будет изменить мой контроллер, который является более тесной связью, чем я забочусь.

Я знаю, что в системе маршрутизации Rails есть методы для генерации URL-адресов из параметров, и мне хотелось бы, чтобы у меня была аналогичная функциональность, т.е. мне хотелось бы, чтобы у меня была функция url-for, которую я мог бы вызывать следующим образом:

(url-for :job 32 "foo" "bar")
; => "/job/32/foo/bar"

Существует ли веб-фреймворк Clojure, который упрощает эту задачу? Если нет, что вы думаете о том, как это можно реализовать?

5
задан Gert 13 March 2012 в 06:57
поделиться