0

종속성을 사용하면 설교 비디오와 설교 비디오 사이의 중첩 된 belongs_to has_one 관계에서 YouTube 비디오가 제대로 파괴되는 문제가 있습니다.중첩 된 리소스가 종속 파괴에서 제대로 파괴되지 않았습니다.

저는 youtube_it 보석을 사용 중이며 상당히 바닐라 설정이 있습니다. 아래

관련 비트 :

비디오 컨트롤러 -

def destroy 
    @sermon = Sermon.find(params[:sermon_id]) 
    @sermon_video = @sermon.sermon_video 

    if SermonVideo.delete_video(@sermon_video) 
    flash[:notice] = "video successfully deleted" 
    else 
    flash[:error] = "video unsuccessfully deleted" 
    end 
    redirect_to dashboard_path 
end 

비디오 모델 -

belongs_to :sermon 

def self.yt_session 
    @yt_session ||= YouTubeIt::Client.new(:username => YouTubeITConfig.username , :password => YouTubeITConfig.password , :dev_key => YouTubeITConfig.dev_key) 
end 

def self.delete_video(video) 
    yt_session.video_delete(video.yt_video_id) 
    video.destroy 
    rescue 
     video.destroy 
end 

설교 모델 -

has_one :sermon_video, :dependent => :destroy 

accepts_nested_attributes_for :sermon_video, :allow_destroy => true 

에서 위의 설정, 모든 로컬 d ata가 성공적으로 제거되었습니다. 그러나, youtube에 비디오가 아닙니다.

모델에서 메소드를 사용하여 destroy 액션을 덮어 쓰려고했으나 내 이해에 실패했기 때문에 YouTube에서 삭제 한 비디오 또는 로컬에서 삭제 한 레코드 만 가져올 수 있습니다. 동시에 두 가지를 동시에 사용할 수는 없습니다. (아래 두 가지 변종과 결과를 게시했습니다.)

def self.destroy 
    @yt_session ||= YouTubeIt::Client.new(:username => YouTubeITConfig.username , :password => YouTubeITConfig.password , :dev_key => YouTubeITConfig.dev_key) 
    @yt_session.video_delete(self.yt_video_id) 

    @sermon_video.destory 
end 
이는 YouTube에서 비디오를 파괴하는 역할을

아닌 로컬 리소스 - -

def self.destroy 
    @yt_session ||= YouTubeIt::Client.new(:username => YouTubeITConfig.username , :password => YouTubeITConfig.password , :dev_key => YouTubeITConfig.dev_key) 
    @yt_session.video_delete(self.yt_video_id) 
end 

마지막으로, 링크 I

이는 로컬 기록을 파괴하는 역할을한다 당신의 도움이 아주 많이 appreci에 대한

<%= link_to "Delete", [@sermon.church, @sermon], :method => :delete %> 

감사합니다 - '이 도움이 경우, 설교를 파괴하기 위해 사용하고 있습니다 ated!

답변

0

마치 문제를 해결 한 것처럼 보입니다. 그러나 누군가가 좀 더 우아하고 적절한 해결책을 가지고있는 경우를 대비하여 공개하기로하겠습니다. 설교 비디오 I 추가 모델에서

-

accepts_nested_attributes_for :sermon_video, :allow_destroy => true 
-

before_destroy :kill_everything 

def kill_everything 
    @yt_session ||= YouTubeIt::Client.new(:username => YouTubeITConfig.username , :password => YouTubeITConfig.password , :dev_key => YouTubeITConfig.dev_key) 
    @yt_session.video_delete(self.yt_video_id) 
end 

그리고 중요한 건, 내가 생각이 설교의 모델에 추가하는 것은이 있었다