2017-11-30 9 views
1

Assetテーブルを更新する必要がありますので、このようなことをする必要があります。Repo.update_allの後にEctoでupdated_at

from(a in Asset, 
where: a.id == ^asset.id, 
update: [set: [asset_name: "a name"] ] 
) 
|> Repo.update_all([]) 

これはうまくいきますが、updated_atは更新されません。

ドキュメントから:

このupdate_allが updated_atの柱のような自動生成されたフィールドを更新しないことに注意してください。

これは私のクエリに時間を渡す必要があるということですか? DateTime.utc_now

おかげ

答えて

2

ような何かはい、あなたはそれのようなものでなければなりませんので、自動的にタイムスタンプを更新する必要があります。

私はここに Timex.now()を使用しますが、私は DateTime.utc_now()が同じように正常に動作します推測するが、私
Asset 
|> where([a], a.id == ^asset.id) 
|> update([set: [asset_name: "a name", updated_at: Timex.now()]]) 
|> Repo.update_all([]) 

それをテストしていない。

頻繁に行う場合は、クエリを受け入れ、タイムスタンプの更新を追加して更新されたクエリを返すジェネリック関数を作成します。

+0

Cool。私は 'NaiveDateTime.utc_now()'を使用しています。歓声 –

+0

'Timex.now()'エラーをダンプする –

+0

@MrH 'timex'は、ネイティブの日付の代わりに使うライブラリーです。なぜなら、それがなくてもそれを達成する方法がわからなかったのですが、' NaiveDateTime。 utc_now() 'が働いた:) – JustMichael

関連する問題