2013-10-28 2 views
0

다음과 같이 빈과 관련된 모든 것을 삭제합니다. 그것은 훌륭하고 기능적입니다.레일에서 모델의 before_destroy를 적절하게 구성하는 방법

모델 BIN은

class Bin < ActiveRecord::Base 

    has_many :savedtweets, :dependent => :destroy 
    before_destroy :mod_newtweets 

    def mod_newtweets 
     Newtweet.where(:tweet_id => @bin.savedtweets.pluck(:tweet_id)).update_all(:status => 'new') 
    end 
end 

그러나, 큰 상자를 파괴 모든 내용이 삭제되지만 실행되지 않습니다 mod_newtweets 내 다른 테이블의 열을 업데이트 할 수 있습니다.

컨트롤러에 넣으면 잘 작동합니다.

Newtweet.where(:tweet_id => @bin.savedtweets.pluck(:tweet_id)).update_all(:status => 'new') 

나는 모든 것이 올바르게 끝났다고 생각했습니다. 어디서든 @bin 정의하지 않은 동안은 모델에 @bin.savedtweets을 사용하는

def mod_newtweets 
    Newtweet.where(:tweet_id => savedtweets.pluck(:tweet_id)).update_all(:status => 'new') 
end 

:

+0

before_destroy가 실제로 호출되었는지 (mod_newtweets에 중단 점 넣기) 확인할 수 있습니까? 또한 before_destroy가 호출되기 전에 savedtweets가 destoyed 될 수 있습니까? ": dependent => : destroy"를 제거하고 시도해 볼 수 있습니까? – Lachezar

+0

Newtweet을 모델에 적용하면 컨트롤러에 비해 어떤 이점이 있습니까? – user2419316

답변

1

은 당신의 방법을 교체합니다. 인스턴스 메서드이므로 self.savedtweets 또는 savedtweets 만 사용하여 Bin 모델의 현재 인스턴스에서 savedtweets 메서드를 호출 할 수 있습니다.

관련 문제