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上的视频不是。

我试图用模型中的某个方法覆盖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 

最后,我的链接如果它有帮助 -

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

感谢您的帮助,非常感谢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