2015-01-17 2 views
0

나는 영화 및 관련 장르의 데이터베이스가 있습니다. 그 영화의 모든 관계없이 그 영화는 다른 장르가 있거나하지 않을 경우의 삭제 얻을 -레일 4에있는 객체와 관련된 모든 레코드를 삭제합니다.

class Genre < ActiveRecord::Base 
    has_many :movie_genres 
    has_many :movies, through: :movie_genres, dependent: delete_all 
    before_destroy :delete_movie 

    private 

    def delete_movie 
    self.movies.delete_all 
    end 

end 

class Movie < ActiveRecord::Base 
    has_many :movie_genres 
    has_many :genres, through: :movie_genres 
end 

내 목표는 장르가 삭제를 얻을 때이다. 나는 dependent : : destroy를 장르 모델에 붙이려고했으나 조인 테이블 레코드 만 삭제되었다. 나는 또한 before_destroy 콜백을 사용하여 장르를 삭제하기 전에 영화를 삭제하려고했지만 그 중 하나는 작동하지 않는 것으로 보입니다.

+0

"조인 테이블 레코드 만 삭제 되나요?" – Meier

+0

delete_movie를 사용할 때 정확히 어떤 일이 발생합니까? 어떤 방식 으로든 작동하지 않습니다. 메서드가 호출됩니까? 그것은 SQL을 생성합니까? – Meier

답변

0

시도 :destroy_all. destroy_all은이 개체와 관련된 모든 개체를 제거합니다. 대용량 데이터의 경우 이것은 느려질 수 있습니다. 참조 : delete_all vs destroy_all?

0

필자는 열이 적용되는 레코드를 선택한 다음 destroy_all을 호출하면됩니다. 내가 놓친 게 있니?

Movie.where(movie_genre: @movie.movie_genre).destroy_all 
관련 문제