Elixir EXTO变更集中的空原子

Elixir EXTO变更集中的空原子,elixir,ecto,Elixir,Ecto,为什么在一个EXTOchangeset方法中,您将参数设置为默认的:emptyatom?e、 g def changeset(user, params \\ :empty) do ... 这是否允许您使用nil为参数调用changeset方法?编程Phoenix中对此进行了解释: 克里斯说:如果没有指定参数,我们不能默认为空映射,因为这与提交空白表单没有区别。相反,我们将参数默认为atom:empty。按照惯例,Ecto将生成一个无效的变更集,参数为空 所以:empty被用作占位符,以便

为什么在一个EXTO
changeset
方法中,您将参数设置为默认的
:empty
atom?e、 g

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

这是否允许您使用nil为参数调用changeset方法?

编程Phoenix中对此进行了解释:

克里斯说:如果没有指定参数,我们不能默认为空映射,因为这与提交空白表单没有区别。相反,我们将参数默认为atom:empty。按照惯例,Ecto将生成一个无效的变更集,参数为空

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


如以下评论中所述:


请注意,对于Ecto 2.0,它使用一个空映射:
def changeset(用户,参数\\%{})do


请注意,对于Ecto 2.0,它使用了一个空映射:
def changeset(user,params\\%{})do
。请看在答案中突出这一点,以防人们错过它。谢谢:)知道为什么Ecto 2.0现在可以默认为空映射吗?使用Ecto 2.2.8,传递
:empty
现在会导致
Ecto.CastError
<但是,代码>%{}工作得很好。