【问题标题】:Empty atom in Ecto changesetEcto 变更集中的空原子
【发布时间】:2016-01-02 21:15:44
【问题描述】:

为什么在 Ecto changeset 方法中将参数设置为默认的 :empty 原子?例如

def changeset(user, params \\ :empty) do
   ...

这是否允许您使用 nil 作为参数调用变更集方法?

【问题讨论】:

    标签: elixir ecto


    【解决方案1】:

    这在凤凰编程中有解释:

    Chris 说:如果没有指定参数,我们不能只默认为空地图,因为这与空白表单提交无法区分。相反,我们将参数默认为 atom :empty。按照惯例,Ecto 将产生一个无效的变更集,参数为空。

    所以:empty用作占位符,以便我们可以区分空白表单提交和未指定参数。


    正如Stefan 在下面的评论中指出的那样:

    请注意,在 Ecto 2.0 中,它使用空地图:def changeset(user, params \\ %{}) do

    【讨论】:

    • 请注意,在 Ecto 2.0 中,它使用空映射:def changeset(user, params \\ %{}) do。见hexdocs.pm/ecto/2.0.2/Ecto.Changeset.html
    • 在答案中突出显示以防人们错过它。谢谢:)
    • 知道为什么 Ecto 2.0 现在可以默认为空地图吗?
    • 在 Ecto 2.2.8 中,传递 :empty 现在会导致 Ecto.CastError。不过,%{} 效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多