2013-02-17 83 views
1

我使用AngularJS資源基本上$ .ajax()某些表單數據。Clojure中的奇怪布爾行爲與表單數據中的複選框

Post.put({user:$scope.getLoggedInUser(), action:"new"},{body:$scope.postBody, "public":$scope.postPublic}, function(post) { 

表格上是名爲「public」的複選框。

我使用這個功能合併從URL中PARAMS表單數據:

(defn get-params [request] 
    (merge (:params request) (parse-string (slurp (request :body)) true))) 

,當我從我的路由的處理程序調用println像這樣我得到一個不錯的true當複選框被選中:

(println (:public (get-params request))) 

但是,當我將參數(即不是println)傳遞給我的控制器中與數據庫交談的另一個函數時,我在該函數的開始處執行了另一個println,並取而代之爲nil

我試圖把它當作

(read-string x) 
(boolean (Boolean/valueOf x)) 
(Boolean/valueOf x) 

無濟於事。

一兩件事,可能會導致它(但我不知道爲什麼),是我在包裝這樣通過認證的要求:凡(create)功能在數據庫中創建一個記錄

(auth? request #(create x y z)) 

無論我嘗試過什麼,我都無法得到它true

編輯:更完整的代碼

控制器

(defn auth? [request callback-true & [callback-false]] 
    (println (callback-true)) 
    (let [login-response (auth/login request)] 
    (if (and (not (string? login-response)) 
      login-response) 
     (callback-true) 
     (if callback-false 
     (callback-false) 
     (json-response (str "{\"auth\":" login-response "}"), 401))))) 

(defn create [user logged-in-user body public?] 
    (if (= logged-in-user user) 
    (json-response (post-view/single-post (post/create user body public?))) 
    (json-response "{\"auth\":\"can't create post under different logged in user\"}" 401))) 

(defroutes routes 
    .... 
    (PUT "/api/:user/new" request 
     (println request) 
     (auth? request 
       #(create (:user (request :params)) 
         (:user (request :session)) 
         (:body (get-params request)) 
         (:public (get-params request))))) 
    .... 
) 

模型

(defn create [username body public?] 
    (println public?) 
    (when-not (and 
       (str/blank? body) 
       (str/blank? username)) 
    (let [user-id (:id (get-id-from-username username)) 
     new-post-id 
     (:id 
      (sql/with-connection db 
       (sql/insert-values :post 
       [:usr_id :body :public] [user-id body (Boolean/valueOf public?)])))] 
    (by-id new-post-id)))) 

回答

0

不要叫get-params兩次。 (request:body)返回一個不能被讀取兩次的流。

+1

'(request:body)'是一個流對象。 Sl it它一次讀取流直到結束,下次沒有什麼可讀的 – Ankur 2013-02-18 04:31:36

+0

這正是發生了什麼事 – tjb1982 2013-02-18 14:34:33