39

changesetin モデルの理解に問題があります。それは何をしますか?1 つのモデルに複数の変更セットを含めることはできますか? たとえば、1 つは作成用、もう 1 つは更新用です。

フェニックスに来る他の人々を助けるために、誰かが簡単な方法で詳しく説明できますか.

4

2 に答える 2

27

ドキュメントから:

変更セットを使用すると、モデルを操作するときに制約のフィルタリング、キャスト、検証、および定義が可能になります。

Ecto モジュールの入門ドキュメントに、チェンジセットを操作する例があります。関数 change/2 と cast/4 は変更セットを作成するための通常のエントリ ポイントですが、残りの関数はそれらを操作するのに役立ちます。

変更セットは、モデルの作成と変更に使用されます。変更セットは文字通り、一連の変更(および検証ルール)を格納する構造体です。変更セットを Ecto Repo に渡して、変更が有効な場合は変更を永続化します。

Ecto の現在のマスター ブランチは、更新時にモデルを Repo に渡すときに暗黙的な変換を削除します。つまり、モデルを更新する唯一の方法は変更セットを使用することです。

変更ログから:

Repo.update/2 へのモデルを考えると、変更を追跡できないため効果がなく、エラーが発生しやすいため、廃止されました。

モデルごとに複数の変更セットを持つという点では、答えは確かにイエスです。変更セットは単なる関数です。実際にはモデルに変更セット関数を配置する必要さえありませんが、モデルに配置するのは一般的な場所です。

ユーザーを登録するときに、ユーザーを更新するときよりも多くのフィールドが必要な場合は、異なる必須フィールドで とregister_changesetを定義できます。create_changeset

于 2015-10-17T11:57:31.240 に答える