0

:dependent =>:destroyを使用すると、説教とその説教ビデオの間にネストされた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のビデオはありません。

モデル内のメソッドで破棄アクションをオーバーライドしようとしましたが、おそらく私の理解に失敗したため、YouTubeから削除されたビデオまたはローカルで削除されたレコードしか取得できません(私は2つの亜種とその結果を掲載しました)。

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 
これが唯一ユーチューブ上の動画を破壊するのに役立つ

ではなく、ローカルリソース - -

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

これが唯一のローカルレコードを破壊するのに役立ちますあなたの助けのための

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

おかげで、非常に多くのappreciを - それが助け場合は「、説教を破壊するために使用してメートルated!

答えて

0

私はちょうど問題を解決したように見えます。しかし、誰かがもっと優雅な/適切な解決策を持っている場合に備えて、私はそれを少しだけ開いたままにしておきます。

私は追加説教ビデオモデルで -

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 

そして説教モデルに追加したために重要なことは、私は信じて、このだった -

accepts_nested_attributes_for :sermon_video, :allow_destroy => true 
関連する問題