在 Ecto 中使用變更集插入時,它會呼叫我的除錯函式,并根據變更集正確檢查一切是否正常:
iex> User.changeset(%User{}, %{username: "username"})
#Ecto.Changeset<
action: nil,
changes: %{},
errors: [
email: {"can't be blank", [validation: :required]}
],
data: #Api.User<>,
valid?: false
>
但是,在使用時update,我的變更集函式永遠不會被呼叫。我認為這是故意的,因為如果只更新一個欄位,它不需要檢查是否需要一個欄位,但是我還有其他功能,例如auto_hash使用虛擬密碼欄位在更新時散列密碼,而這個如果從未呼叫變更集函式,則無法在更新時呼叫。
所以我的問題是:有沒有辦法設定與僅在更新時呼叫的變更集函式類似的東西?
通過“更新”,我的意思是在執行以下操作時:
iex> user = Repo.get_by(User, email: "email")
iex> changeset = Ecto.Changeset.change(user, [ password: "password", password_confirmation: "password" ])
iex> Repo.update(changeset)
uj5u.com熱心網友回復:
看起來你沒有呼叫你的變更集函式。Ecto.Changeset.change/2并不神奇地知道你的特定函式在哪里:你必須呼叫你自己的變更集函式,例如User.changeset(existing_user_data, new_data)——這假設你已經命名了你的函式變更集并且你已經在你的用戶模塊中定義了它。您可能會維護多個變更集功能,例如,一個用于插入新資料,另一個用于更新資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/514398.html
