2012-03-13 2 views
5

私はClojureを使ってWebアプリケーションを開発中です。現在、RingMoustacheSandbarHiccupです。図私のコントローラでClojureとそのWebフレームワークで、Railsのurl_forに似た機能をどのように実装しますか?

(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 step)。私はヒントルートで定義したものを繰り返しているので、URLのハードコーディングされた"/job/"部分が好きではありません。私がルートを変更すると、コントローラーを変更する必要があります。これは、私が気にしているよりも緊密なカップリングです。

つまり私は、私はこのように呼び出すことができます機能url-forがあればいいのに、私はRailsのルーティングシステムはパラメータからURLを生成するためのメソッドを持っていることを知っている、と私は同様の機能を持っていた希望:

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

ですこれを簡単にするClojure Webフレームワークがありますか?そうでない場合、これをどのように実装できるかについてのあなたの考えは何ですか?

答えて

4

ノワールはsomething similarを提供します。それもurl-forと呼ばれています。

+0

いいね!私はノワールを何度も見てきましたが、これまでのところ、私はMustacheのよりミニマルなアプローチを本当に好きでした。私は今日、ノワールが私のニーズに合っているかどうかを見るために少し実験をします。 – Gert

2

上記の関数例は、以下のように実装できます。しかし、これがあなたが探しているものなのかどうかはわかりません。

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

ありがとうございますが、これは本質的にurlをハードコーディングするのと同じです。この機能はjobを "/ job /"に変換するだけなので、 – Gert

関連する問題