나는 changes
방법을 사용하지 않았습니다. 하지만 당신은 항상 마법 방법 <attribute_name>_changed?
및 <attribute_name>_was
을 사용할 수 있다는 확신 :
services.any? {|s| s.attribute_name_changed?}
services.map(&:attribute_name_was)
자세한 내용은
참조 라이언 베이츠의 railscast : #109 episode
UPDATE : 당신은 :after_delete
을 통과하고 has_many
-:after_add
콜백 수 있습니다 직접 협회 :
has_many :items, :after_add => :my_method_or_proc1, :after_remove => :my_method_or_proc2
이 콜백을 사용하고 어떻게 작동하는지주의 깊게 살펴보십시오. 은 items.build
이고 items.create
은입니다. after_add
콜백 는 관련된 객체 구축에 한 번만 호출됩니다 그래서 당신은 items.build
를 호출하는 경우 다음 ( 예를 들어 중첩 된 속성을) 부모 개체를 저장합니다. 부모가 유효성을 확인한 다음 items
을 구축하면 데이터베이스에 저장되지 않으므로 after_add
콜백에 의존 할 수 없습니다. 즉, 추가 된 협회의 기록이 DB에 저장되었다고 말하는 것은 아닙니다. 따라서 전화가 items.create
일 때만 항목이 추가되고 저장됩니다. 이 설명을 이해하시기 바랍니다.
관련 개체가 업데이트 된 경우에만 작동합니다. 연결된 객체가 추가되거나 제거되면 (그것은'services' 연관에 더 이상 존재하지 않기 때문에) 그것은 나를 위해 작동하지 않습니다. 내가 도대체 뭘 잘못하고있는 겁니까? – morgler