Clojure Luminus中的复选框

Clojure Luminus中的复选框,clojure,luminus,Clojure,Luminus,本周我开始学习Clojure,特别是我正在学习Luminus的web开发。因为我想了解CRUD过程,所以我设置了一个函数将我的帖子保存到DB中: (defn save-post! [{:keys [params]}] (if-let [errors (validate-post params)] (-> (response/found "/posts") (assoc :flash (assoc params :errors errors))) (do

本周我开始学习Clojure,特别是我正在学习Luminus的web开发。因为我想了解CRUD过程,所以我设置了一个函数将我的帖子保存到DB中:

(defn save-post! [{:keys [params]}]
  (if-let [errors (validate-post params)]
    (-> (response/found "/posts")
      (assoc :flash (assoc params :errors errors)))
  (do
    (db/save-post!
      (assoc params :created_at (java.util.Date.)))
    (response/found "/posts"))))
查询非常基本:

-- :name save-post! :! :n
-- :doc creates a new post record
 INSERT INTO posts
 (title, body, active, created_at)
 VALUES (:title, :body, :active, :created_at)
但是HTML表单有一个复选框字段:

<input type="checkbox" name="active" value="1">Published<br />
在:在java.util.Date创建_之后。线路

如何检查元素是否已设置为活动状态并将其添加到参数中为true或false

看起来你的代码离工作不远了。您需要检查params映射以查看它是否具有复选框的值。如果选中复选框时:active params等于1,则可以执行以下操作:

(assoc params :active (= "1" (:active params)))
但这实际上是在尝试更新映射中的特定值,这可以更习惯地进行:

(update params :active #(= "1" %))
其中,最后一个参数是一个函数,它接受关键字的任何当前值并返回新值

另一个潜在的问题是:您可能不想使用params映射作为DB查询的直接输入,因为它很容易包含您不想要或不期望的键/值。只显式地从中提取所需的值会更安全,例如选择键参数[:title:body:active]

如何检查元素是否已设置为活动状态并将其添加到参数中为true或false

看起来你的代码离工作不远了。您需要检查params映射以查看它是否具有复选框的值。如果选中复选框时:active params等于1,则可以执行以下操作:

(assoc params :active (= "1" (:active params)))
但这实际上是在尝试更新映射中的特定值,这可以更习惯地进行:

(update params :active #(= "1" %))
其中,最后一个参数是一个函数,它接受关键字的任何当前值并返回新值

另一个潜在的问题是:您可能不想使用params映射作为DB查询的直接输入,因为它很容易包含您不想要或不期望的键/值。只显式地从中提取所需的值会更安全,例如选择键参数[:title:body:active]