레일에 더러운/변경 플래그가 있다고 들었습니다. after_commit 콜백에서 사용할 수 있습니까? 내 사용자 모델에서레일, 더티 또는 변경된 것을 사용합니까? after_commit이있는 플래그
나는이 :
after_commit :push_changes
는 def push_changes
에서 내가 이름 필드를 변경 한 경우 알 수있는 방법을 싶습니다. 그게 가능하니?
레일에 더러운/변경 플래그가 있다고 들었습니다. after_commit 콜백에서 사용할 수 있습니까? 내 사용자 모델에서레일, 더티 또는 변경된 것을 사용합니까? after_commit이있는 플래그
나는이 :
after_commit :push_changes
는 def push_changes
에서 내가 이름 필드를 변경 한 경우 알 수있는 방법을 싶습니다. 그게 가능하니?
당신은 확인할 수있는 몇 가지 할 수있는 ...
가장 먼저, 당신과 같은 개인 특성을 확인할 수 있습니다 : 당신은 또한 변경된 속성을하는 확인할 수
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
을 사용할 때 다시 액세스 할 수 있습니다.
after_commit을 사용하여 모델 특성 값을 저장하기 전에 값에 액세스 할 수 있습니다.
더 많은 정보를 원하시면이 게시물을 참조하십시오 after_commit for an attributeactiverecord는 멋지다. 나는 단지 previous_changes의 한 예를 가지고있다. - http://t.co/yjCLEdDHYH –
이것은 정답이다. – typeoneerror
을하지만이 작업 after_commit을한다, 또는 단지 이전에 저장? – AnApprentice
죄송합니다. 그 부분을 놓쳤습니다. 모델을 저장 한 후에는 변경된 속성이 지워지므로이 방법은 쓸모가 없습니다 ... 예를 들어, 'before_save'를 사용하여 변경된 속성을 저장 한 다음 나중에 검색 할 수 있습니까? – BaronVonBraun
'changed?'/'changes'는 ** after_save **에서 작동하지만 ** after_commit **에서는 작동하지 않습니다. 대신 ** after_commit **에서'previous_changes'를 사용할 수 있습니다 - @ Jonathan의 [answer] (http://stackoverflow.com/a/16823712/165673) – Yarin