規則我有動態生成的形式,所以我試圖驗證他們這樣說:構建比諾驗證地圖
(defn valid? [media-id data] ;media-id it's just a number, data is the form input
(let [fields (common/get-fields-to-show media-id)] ; list of strings (the field names)
(map (fn [f]
(vali/rule (vali/has-value? ((keyword f) data))
[(keyword f) "Write something!!"]))
fields))
(not (apply vali/errors? (map keyword fields))))
,但它不會工作。沒有任何異常或消息,valid?
被評估爲true
,因此儘管所有字段都爲空,但流程仍在繼續,因爲沒有錯誤。我甚至試圖(vali/has-value? nil)
強制錯誤,但沒有任何變化。
做實驗,我刪除了map
,花了兩個具體領域,「手工」打造他們的規則是這樣的:
(defn valid? [media-id data]
(let [fields (common/get-fields-to-show media-id)
f1 (first fields)
f2 (second fields)]
(vali/rule (vali/has-value? ((keyword f1) data))
[(keyword f1) "Testing"])
(vali/rule (vali/has-value? ((keyword f2) data))
[(keyword f2) "Testing"])
(not (apply vali/errors? (map keyword fields))))
而且它完全適用於那些幸運的領域。
我懷疑它與the way noir.validation saves the errors(一個動態聲明的事物)有關,但我不確定。
這樣做了。謝謝。 – eseca 2013-05-05 21:00:48