2011-08-23 2 views

답변

10

당신은 확인할 수있는 몇 가지 할 수있는 ...

가장 먼저, 당신과 같은 개인 특성을 확인할 수 있습니다 : 당신은 또한 변경된 속성을하는 확인할 수

user = User.find(1) 
user.name_changed? # => false 
user.name = "Bob" 
user.name_changed? # => true 

을하지만, 전체 모델 :

user = User.find(1) 
user.changed  # => [] 
user.name = "Bob" 
user.age = 42 
user.changed  # => ['name', 'age'] 

당신도 할 수있는 몇 가지있다가 - 자세한 내용은 http://api.rubyonrails.org/classes/ActiveModel/Dirty.html을 확인하십시오.

편집 : 이것이 after_commit 콜백에서 일어나는 주어진

그러나이 모델이 이미 손실됩니다 저장하기 전에 발생한 변화의 지식을 의미 저장되었습니다. before_save 콜백을 사용하여 직접 변경 사항을 선택하고 어딘가에 저장 한 다음 after_commit을 사용할 때 다시 액세스 할 수 있습니다.

+0

을하지만이 작업 after_commit을한다, 또는 단지 이전에 저장? – AnApprentice

+3

죄송합니다. 그 부분을 놓쳤습니다. 모델을 저장 한 후에는 변경된 속성이 지워지므로이 방법은 쓸모가 없습니다 ... 예를 들어, 'before_save'를 사용하여 변경된 속성을 저장 한 다음 나중에 검색 할 수 있습니까? – BaronVonBraun

+6

'changed?'/'changes'는 ** after_save **에서 작동하지만 ** after_commit **에서는 작동하지 않습니다. 대신 ** after_commit **에서'previous_changes'를 사용할 수 있습니다 - @ Jonathan의 [answer] (http://stackoverflow.com/a/16823712/165673) – Yarin

19

after_commit을 사용하여 모델 특성 값을 저장하기 전에 값에 액세스 할 수 있습니다.

더 많은 정보를 원하시면이 게시물을 참조하십시오 after_commit for an attribute

+1

activerecord는 멋지다. 나는 단지 previous_changes의 한 예를 가지고있다. - http://t.co/yjCLEdDHYH –

+0

이것은 정답이다. – typeoneerror