-1

オンラインでビデオを購入して視聴できるウェブサイトを構築しています。有料ユーザーには動画が表示され、その他のユーザーには説明と [今すぐ購入] ボタンのみが表示されます。

「LineItems」が動画を指す「Order」モデルがあります。

「ビデオ」リソースを使用しており、CanCan とともに認証を工夫しています。ビデオを購入する人には「顧客」の役割があります。

ユーザーが支払いを完了すると、注文のステータスがcompletedに変わります。したがって、現在のユーザーがビデオを購入したかどうかを確認して表示する方法が必要です。これはControllerで実行できますが、CanCanで実行する方法はありますか?

4

1 に答える 1

0

これが私がそれを解決した方法です:

次のコードを使用して、ユーザーモデルに「purchased_videos」メソッドを追加しました。

def purchased_videos
  Video.joins(:line_items => {:order => :user}).where(:orders => {:user_id => self, :status => 'successful'})
end

ability.rbに、次のコードを追加しました。

# Free videos can be watched by anyone
can :watch, Video do |video|
  video.price == 0 || user.purchased_videos.exists?(video.id)
end

今、私はビデオビューでこのようなことをすることができます:

# Show video if user can watch it
render 'video_partial' if can?(:watch, @video)

# Show preview otherwise
render 'preview_partial' if cannot?(:watch, @video)
于 2013-01-20T15:08:53.413 に答える