2017-11-30 6 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

가 같은 것을해야한다, 그래서 예, 자동으로 타임 스탬프를 업데이트해야합니다

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

내가 여기 Timex.now()를 사용하지만 DateTime.utc_now()는 그냥 잘 작동합니다 생각하지만 난을 그것을 테스트하지 않았습니다.

자주하는 경우 쿼리를 허용하고 타임 스탬프 업데이트를 추가하고 업데이트 된 쿼리를 반환하는 제네릭 함수를 만드는 것이 좋습니다.

+0

차가움. 'NaiveDateTime.utc_now()'를 사용하고 있습니다. 건배 –

+0

'Timex.now()'에러를 덤프합니다. –

+0

@MrH'timex'는 원래 날짜 대신 라이브러리를 사용하기 때문에 왜 그것을 얻을 수 있는지 확실하지 않지만'NaiveDateTime. utc_now()'가 작동했습니다 :) – JustMichael