0

:dependent => :destroy.

私は 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

上記のセットアップでは、すべてのローカル データが正常に削除されます。ただし、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

これは、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 %>

ご協力ありがとうございます。

4

1 に答える 1

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
于 2012-04-24T16:22:08.807 に答える