9

今日、Elixir と Phoenix の作業を始めたばかりです。Ecto をマッパーとして追加しようとしていますが、時間の使い方に問題があります。

これが私のモデルです。

  schema "users" do
    field :name, :string
    field :email, :string
    field :created_at, :datetime, default: Ecto.DateTime.local
    field :updated_at, :datetime, default: Ecto.DateTime.local
  end

デフォルトで created_at と updated_at を設定しようとしていますが、これをコンパイルしようとすると、次のエラーが発生します。

== Compilation error on file web/models/user.ex ==
** (ArgumentError) invalid default argument `%Ecto.DateTime{day: 13, hour: 19, min: 47, month: 2, sec: 12, year: 2015}` for `:datetime`
lib/ecto/schema.ex:687: Ecto.Schema.check_default!/2
lib/ecto/schema.ex:522: Ecto.Schema.__field__/4
web/models/board.ex:9: (module)
(stdlib) erl_eval.erl:657: :erl_eval.do_apply/6

ドキュメントを取得するための助けはあまりありません。これを行う正しい方法は何ですか?

4

3 に答える 3

16

デフォルトのフィールド名は :inserted_atand:updated_atですが、キーワード リストを渡して、独自のフィールド名とマージできます

schema "users" do
  field :name, :string
  field :email, :string
  timestamps([{:inserted_at,:created_at}])
end
于 2015-03-10T01:14:05.327 に答える
13

:datetime日時のネイティブ Postgres データ型です。このデータ型は、2 要素の Elixir タプル ( {{yy, mm, dd}, {hh, mm, ss}}) にマップされます。構造体は 2 要素の%Ecto.DateTime{}タプルではないため、コンパイル エラーが発生します。

フィールドのタイプを に設定するとEcto.DateTime、すべてシームレスに機能するはずです。

プリミティブ型と非プリミティブ型に関する関連ドキュメントは次のとおりです

PSもご覧になることをお勧めしますEcto.Schema.timestamps/1。これは、基本的に手動で記述したものに展開されるマクロです (フィールドと フィールドが追加created_atupdated_atれ、デフォルトで がどのタイプになるかを選択できますEcto.DateTime)。

schema "users" do
  field :name, :string
  field :email, :string
  timestamps
end
于 2015-02-13T19:58:09.473 に答える