学习Elixir / Ecto,并且遇到了与变更集相关的障碍。不知道我做错了什么。
我有一个“域模型”结构,它包含一些必填字段。当我执行put_change
时,返回的变更集仍然表示变更集上存在错误(字段缺失),即使它在更改中也是正确的。
cset = Activity.changeset(%Activity{}, %{details: "Played in the snow", child_id: child_id})
#Ecto.Changeset<action: nil,
changes: %{child_id: "ed553c30-38d2-4cb1-9029-eb2180c141cc",
details: "Played in the snow"},
errors: [relevant_date: {"can't be blank", [validation: :required]},
display_time: {"can't be blank", [validation: :required]}],
data: #MyApp.Domain.Activity<>, valid?: false>
以上是可以预期的。 relevant_date
和display_time
都缺失,因此错误应该在那里。
cset |> Ecto.Changeset.put_change(:relevant_date, ~D[2016-12-31])
#Ecto.Changeset<action: nil,
changes: %{child_id: "ed553c30-38d2-4cb1-9029-eb2180c141cc",
details: "Played in the snow", relevant_date: ~D[2016-12-31]},
errors: [relevant_date: {"can't be blank", [validation: :required]},
display_time: {"can't be blank", [validation: :required]}],
data: #Kidgenius.Domain.Activity<>, valid?: false>
这是对我没有任何意义的部分。更改字段中的relevant_date
就在那里,但它仍然告诉我relevant_date can't be blank
。
任何帮助将不胜感激!
编辑:这是Ecto 2.1.1
。
答案 0 :(得分:2)
$section->getAllChildren()->pluck('id');
没有执行验证,您需要通过put_change
传递更新的变更集,因此它会尝试对您更新的状态执行验证。
希望能稍微澄清一下这个问题!
修改强>
只是为了澄清:
validate_required