2011-09-20 3 views
4

after_update 내 모델에서. 열의 이전 값을 얻으려면 어떻게해야합니까?콜백에서 이전 값의 열을 얻는 방법은 무엇입니까?

+2

. 예 : 'object.column_name_was',하지만 업데이트 후이 작품을 생각하지 않습니다. – Mischa

+0

있습니다. 모든 ActiveRecord 생명주기 콜백은 트랜잭션 내에서 실행됩니다. 커밋은 모든 콜백이 true를 반환하는 경우에만 수행됩니다. 그리고 모델은 실제 커밋이 완료 될 때까지 이전 값을 유지합니다. – compostus

+0

@ 미샤 : 아니요, 당신 말이 맞아요. 사용할 수 있습니다. –

답변

7

changed_attributes() 모델의 메소드는 변경된 속성의 해시를 원래 값인 after_udpate까지 가져옵니다. 더 많은 정보와 더 많은 관련 방법 here.

class MyModel < ActiveRecord::Base 
    after_update :log_changed 

    def log_changed 
    puts "changed attributes:" 
    puts changed_attributes.inspect 
    end 
end 

합니다 ... 콘솔에서 다음을 제공합니다 :

는`* _was` 방법있다
$ rails console 
Loading development environment (Rails 3.0.7) 
test(dev)> m = MyModel.first 
=> #<MyModel id: 134611365, name: "oldname", created_at: "2011-09-16 10:27:53", updated_at: "2011-09-20 11:58:11"> 
test(dev)> m.name = 'newname' 
=> "newname" 
test(dev)> m.save 
    SQL (0.2ms) BEGIN 
    SQL (0.4ms) SHOW TABLES 
    AREL (0.2ms) UPDATE `mymodels` SET `updated_at` = '2011-09-20 12:07:34', `name` = 'newname' WHERE `mymodels`.`id` = 134611365 
changed attributes: 
{"name"=>"oldname", "updated_at"=>Tue, 20 Sep 2011 11:58:11 UTC +00:00} 
    SQL (83.9ms) COMMIT 
=> true 
test(dev)> m.changed_attributes 
=> {} 
관련 문제