我如何实现类似Rails的功能;使用Clojure及其web框架的url_?

我如何实现类似Rails的功能;使用Clojure及其web框架的url_?,clojure,url-routing,ring,Clojure,Url Routing,Ring,我正在使用Clojure开发一个web应用程序,目前使用和。我有一个名为job的资源,以及一个以多步骤形式显示特定作业的特定步骤的路由(为了简单起见,省略了其他路由): 在控制器渲染的视图中,有指向同一作业中其他步骤的链接。目前,这些URL是手工构建的,例如(str”/job/“id-step)。我不喜欢url中硬编码的“/job/”部分,因为它重复了我在胡须路径中定义的内容;如果我改变路线,我需要改变我的控制器,这是一个比我所关心的更紧密的耦合 我知道Rails的路由系统有从参数生成url的方

我正在使用Clojure开发一个web应用程序,目前使用和。我有一个名为job的资源,以及一个以多步骤形式显示特定作业的特定步骤的路由(为了简单起见,省略了其他路由):

在控制器渲染的视图中,有指向同一作业中其他步骤的链接。目前,这些URL是手工构建的,例如
(str”/job/“id-step)
。我不喜欢url中硬编码的
“/job/”
部分,因为它重复了我在胡须路径中定义的内容;如果我改变路线,我需要改变我的控制器,这是一个比我所关心的更紧密的耦合

我知道Rails的路由系统有从参数生成url的方法,我希望我有类似的功能,也就是说,我希望我有一个函数
url for
,我可以这样调用:

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

有没有一个Clojure web框架可以让这变得简单?如果没有,您对如何实现这一点有何想法?

您提到的示例函数可以实现如下。但我不确定这是否正是你想要的

(defn url-for [& rest]
    (reduce 
        #(str %1 "/" %2) "" (map #(if (keyword? %1) (name %1) (str %1)) rest)))

黑色提供了一种新的颜色。它甚至被称为
url,用于

谢谢,但这本质上与硬编码url相同,因为此函数只会将:job转换为“/job/”。很好!我看过很多次黑色,但到目前为止,我真的很喜欢更简约的胡子设计。今天我将做一个小实验,看看黑色是否适合我的需要。
(defn url-for [& rest]
    (reduce 
        #(str %1 "/" %2) "" (map #(if (keyword? %1) (name %1) (str %1)) rest)))