4
에 after_update
내 모델에서. 열의 이전 값을 얻으려면 어떻게해야합니까?콜백에서 이전 값의 열을 얻는 방법은 무엇입니까?
에 after_update
내 모델에서. 열의 이전 값을 얻으려면 어떻게해야합니까?콜백에서 이전 값의 열을 얻는 방법은 무엇입니까?
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
=> {}
. 예 : 'object.column_name_was',하지만 업데이트 후이 작품을 생각하지 않습니다. – Mischa
있습니다. 모든 ActiveRecord 생명주기 콜백은 트랜잭션 내에서 실행됩니다. 커밋은 모든 콜백이 true를 반환하는 경우에만 수행됩니다. 그리고 모델은 실제 커밋이 완료 될 때까지 이전 값을 유지합니다. – compostus
@ 미샤 : 아니요, 당신 말이 맞아요. 사용할 수 있습니다. –