为什么Changeset.change跳过Elixir中的验证?

拉济纳尔

这是用于插入或更新某些数据的简单功能。如果用户数据已经存在于数据库中,我只需对其进行更新,否则我将在数据中插入新行。一切正常,但我有验证问题。变更集定义:

  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值来更新现有行,则changeset不会通过验证,因此我的数据库无法正确更新。在Repo.update()之前如何在更改上也强制验证?

克奈尔

根据文档:Ecto.Changeset/2用于内部数据更改,因此它绕过了验证:

该功能用于处理应用程序内部的数据。因此,既不执行验证也不进行强制转换。这意味着change/2期望更改映射或关键字中的键是原子。

您应该使用Ecto.Changeset.cast/4来应用验证,然后更新它是否有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Dev

为什么在JavaScript中跳过while循环?

来自分类Dev

为什么Android Firebase跳过身份验证活动

来自分类Dev

为什么在Elixir中不能枚举元组?

来自分类Dev

在Pandas数据框中,为什么max()函数跳过列?

来自分类Dev

为什么ChartJS在此代码段中跳过xAxis标签?

来自分类Dev

为什么我在跳过的队列中收到消息

来自分类Dev

为什么在Vim中运行C代码会跳过scanf()?

来自分类Dev

为什么低于0.25的time()会跳过Python中的动画?

来自分类Dev

为什么foreach从数组中跳过一个元素

来自分类Dev

为什么我的for循环跳过列表中的元素?

来自分类Dev

为什么ftell跳过文件中的某些位置?

来自分类Dev

跳过IIB中的证书验证

来自分类Java

为什么for循环跳过?

来自分类Dev

为什么跳过std :: getline()?

来自分类Dev

为什么XmlReader跳过元素?

来自分类Dev

为什么Java跳过For语句?

来自分类Dev

在Elixir中,为什么将令牌除以1?

来自分类Dev

为什么Elixir中的Rem运算符返回负数?

来自分类Dev

为什么Elixir中没有return语句

来自分类Java

什么是Java中的扫描程序跳过以及为什么要使用它?

来自分类Dev

在切片时,为什么我不能跳过列表,跳过单个括号中的最后一项?

来自分类Java

为什么在Spring Boot中不替换验证消息?

来自分类Dev

为什么在Spring Security中对“ anonymousUser”进行身份验证?

来自分类Java

为什么Javax验证在DTO类中不起作用?

来自分类Dev

验证在Metronic UI中不起作用。为什么?

来自分类Dev

为什么不在Laravel 5.6中显示验证错误消息

来自分类Java

在Spring中是否可以跳过注释验证

来自分类Dev

为什么跳过此Debug.Assert?

来自分类Dev

为什么Intellij IDEA跳过Maven测试

TOP 榜单

热门标签

归档