【发布时间】:2017-11-30 10:16:52
【问题描述】:
这是一个用于插入或更新一些数据的简单函数。 如果用户数据已经在数据库中,我只需更新它,否则我插入一个新的数据行。一切正常,但我在验证时遇到问题。 变更集定义:
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:name, :surname, :user_id])
|> validate_required([:name, :surname, :user_id])
|> unique_constraint(:user_id)
end
validate_required 当前仅在插入期间有效,在更新期间无效。
def add_or_change(user_id, new_data) do
data_from_db = data_by_user_id (user_id)
case data_from_db do
nil ->
Data.changeset(%Data{}, new_data)
|> Repo.insert()
_ ->
Changeset.change(data_from_db, new_data)
|> Repo.update()
end
end
如果我尝试将 "" 作为 :name 值插入,我会得到预期的错误(不能为空白)。但是,如果我使用 "" 作为 :name 值更新现有行,则变更集不会通过验证,并且我的数据库更新不正确。如何在 Repo.update() 之前强制验证更改??
【问题讨论】:
标签: validation elixir ecto changeset