【发布时间】:2016-01-02 21:15:44
【问题描述】:
为什么在 Ecto changeset 方法中将参数设置为默认的 :empty 原子?例如
def changeset(user, params \\ :empty) do
...
这是否允许您使用 nil 作为参数调用变更集方法?
【问题讨论】:
为什么在 Ecto changeset 方法中将参数设置为默认的 :empty 原子?例如
def changeset(user, params \\ :empty) do
...
这是否允许您使用 nil 作为参数调用变更集方法?
【问题讨论】:
这在凤凰编程中有解释:
Chris 说:如果没有指定参数,我们不能只默认为空地图,因为这与空白表单提交无法区分。相反,我们将参数默认为 atom :empty。按照惯例,Ecto 将产生一个无效的变更集,参数为空。
所以:empty用作占位符,以便我们可以区分空白表单提交和未指定参数。
正如Stefan 在下面的评论中指出的那样:
请注意,在 Ecto 2.0 中,它使用空地图:
def changeset(user, params \\ %{}) do
【讨论】:
def changeset(user, params \\ %{}) do。见hexdocs.pm/ecto/2.0.2/Ecto.Changeset.html
:empty 现在会导致 Ecto.CastError。不过,%{} 效果很好。