2009-07-07 2 views
30

ActiveRecord 모델을 반복하여 처리하고 일부 처리를 수행 한 다음 모델을 다시 저장하는 프로세스가 있습니다. 그러나 종종 처리로 인해 속성이 변경되지 않으므로 updated_at 열은 변경되지 않습니다 (save가 호출 되더라도).Rails 2.3.2의 "Touch"updated_at 열

부분 업데이트를 비활성화하지 않는 것이 좋습니다 (일반적으로 유용합니다). 내 두 가지가 있습니다 같은데요이 중복/약간 낭비 보이더라도

  1. 모델에 별도의 타임 스탬프 열을 추가 (즉, 'processed_at')과,이 나 자신을 관리 할 수 ​​있습니다.
  2. 또는 어떻게 든 updated_at 속성의 관리를 재정의 하시겠습니까?

레일스 3에는 내가 알고있는 '터치'방법이있을 것이라고 들었습니다.

아이디어/옵션/의견이 있으십니까?

답변

52

는 실제로 touch 방법은 레일 인 2.3.x에 이미, 그래서 당신은 간단하게 수행 할 수 있습니다

model.touch 

updated_at 열을 업데이트합니다. 또한, 현재 날짜와 시간을 사용하여 다른 열을 업데이트 할 : 이제 인 2.3.x 라인이 오락가락 것을

model.touch(:column_name) 
+0

와우! 네가 옳아. 교훈은 배운 블로그 게시물 (http://ryandaigle.com/articles/2009/4/20/what-s-new-in-edge-rails-touching)에서 읽은 모든 것을 믿지 마시고 바로 소스 (http://github.com/rails/rails/blob/0d3c5f0a822cd1b6029b5f619774b7794a94f370/activerecord/lib/active_record/timestamp.rb#L27) – ideasasylum

+0

DHH가 트위터에서 언급 한 것 같습니다. 그게 내가 알고있는 방법입니다. –

+0

Grrr ... 터치 지원이 2.3.2 릴리스를 놓친 것처럼 보이며 2.3-STABLE 분기에만 있습니다. 2.3.3 이정표가 없지만 7 월 18 일 2.3.4로 표시됩니다. 나는 기다려야 할 것 같아 .--( – ideasasylum

1

을 좀 더 확실한 대답은 터치 2.3.8 때까지 액티브 안으로 들어가지는 못했습니다이다 . 그래서, Rails 2.3.2를 여전히 사용하고있는 사람들은 (OP가 있었기 때문에 - 그리고 내가 현재) 레코드를 "만지기"위한 또 다른 방법을 찾아야 할 것입니다.