0
Elixir/Ectoを学習し、チェンジセットに関連する不具合を犯しました。私が間違っていることを確信していない。Ecto Changeset、変更時に検証されない必須フィールド
私はいくつかの必須フィールドを持つ "ドメインモデル"構造体を持っています。 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
です。
ありがとう!これは私の質問に答えます。 'validate_required'を実行すると、チェンジセットの他のすべての検証も実行されますか?データを変更したら、チェンジセットのバリデーションを「再実行」するための慣用的な方法はありますか? – Brandon
喜んで助けてください!あなたの質問に関しては、全てのバリデーションルールを( 'validate'のような)別々の関数に抽出することで取り組むことができます。それは' changeset'を受け入れます。 Elixir/Ectoの素晴らしい点は、あなたが必要としているものを簡単な機能で構成できることです。それを活用してください! –