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