: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 %>
ご協力ありがとうございます。