2012-08-29 1 views
0

previous_changes 메서드를 사용하여 내 ActiveRecord 모델의 변경 사항을 확인하여 JSON을 통해 전달하고 중첩 된 특성이 손상되었음을 알리는 비슷한 내용이 있는지 궁금합니다.ActiveRecord에는 중첩 된 특성 모델이 파괴되었다는보고 방법이 있습니까?

Parent has_many ChildrenParent accepts_nested_attributes_for :children, allow_destroy: true 인 경우 다음을 수행 할 수 있기를 바랍니다.

> p = Parent.last 
> p.children.length 
=> 3 
> p.update_attributes {"name"=>"Daddy","children_attributes"=>{"0"=>{"__destroy"=>"1","id"=>"12"}}} 
=> true 
>p.previous_changes 
=> {"name"=>["", "Daddy"], "updated_at"=>[Mon, 27 Aug 2012 22:34:34 EST +10:00, Wed, 29 Aug 2012 10:13:33 EST +10:00]} 
>p.destroyed_attributes #Not a real method!!! 
=> {"children_attributes"=>{"0"=>{"id"=>"12"}}} 

내가 원하는 마지막 명령입니다. 이 정보를 얻기 위해 내 솔루션을 채찍질 할 수는 있지만 이미 레일스에 숨어있는 뭔가가 있기를 바라고 있습니다.

편집 :

이 일의 방식으로 내장 그러나 나는 해결책을 마련 않았다 있다는 것을하지 않는 것 같습니다. 부모 모델에서 before_save 및 after_save 콜백을 정의했습니다. before_save에서는 모든 자식 ID의 배열을 저장했습니다. after_save에서는 모든 자식 ID의 배열을 뺍니다. 배열에 남아있는 모든 ID가 삭제되었습니다! attr_accessor로 정의 된 상위 모델의 인스턴스 변수에 배열을 저장했습니다.

답변

1

광고하여 세부 모델 (어린이)에 :after_destroy followup_tasks 콜백

def followup_tasks 
    #do other stuff 
end 
+0

그래, 나는 이런 식으로 뭔가를해야 할 거라고 생각했다. 이제 시도해 보았습니다.이 콜백에서 부모 모델로 무언가를 전달하는 방법을 알 수 없습니다. 부모 모델에서 인스턴스 변수 설정을 시도했지만 자식이 삭제 된 후 컨트롤러의 모델 인스턴스에 나타나지 않습니다. 음. – brad

+0

http://stackoverflow.com/questions/12171216에서 다른 질문을했습니다. – brad

관련 문제