2016-05-28 17 views
0

Ectoでfield :name, default: "john"のように指定すると、fields in your Schemaにデフォルト値を与えることができます。ドキュメントでは、このデフォルトはコンパイル時に格納され、Date.nowUUID.generateのようなものは機能しません。Ecto:スキーマで変数のデフォルトのフィールド値を定義する方法は?

私の質問は、これらの変数のデフォルトをどのように作成するのですか? 「構造体を作成した後に値を設定する」と言うこともできます。ただし、仮想フィールドを使用する場合は、ではなく、が可能です。 eを使用するとg。 Repo.all(MyModel)または他のクエリコマンドの場合、仮想フィールドはデフォルトの固定値に設定されます。

可変スキーマフィールドのデフォルトを作成するにはどうすればよいですか?

+0

私はこの質問を理解しているとは確信していませんが、デフォルト値をすべて削除して、 'Repo.all'でそれらを取得した後、またはデフォルト値を保持したい場合は、検索後に書き直すだけです。 – JustMichael

+0

@JustMichaelこれを行うと、コードを強く結びつけることができます。モデルを使用するすべての場所でデフォルトについて知る必要があります。モデルがデータベースからクエリされる方法を知る必要があります。 – Qqwy

答えて

3

これはできません。 Ectoは単にstructを定義し、Elixir構造体はコンパイル時に展開されます。

これを回避するには、デフォルト値で構造体を生成する関数を明示的に指定するか、put_changeなどを介してチェンジセット関数でこれを実行します。

関連する問題