2012-12-30 23 views
-1

我正在建立一個網站,人們可以在網上購買&觀看視頻。付費用戶將看到視頻,其他人只會看到描述&立即購買按鈕。如何提供CanCan「查看購買領域」的能力?

有一個「訂單」模型,「LineItems」指向視頻。

我正在使用「視頻」資源,與CanCan一起設計身份驗證。那些購買視頻的人有「客戶」角色。

當用戶完成付款後,狀態的訂單更改爲完成。所以我需要一種方法來檢查當前用戶是否購買了視頻並顯示它。雖然這可以在Controller中完成,但CanCan中有這種方法嗎?

+0

這個問題太籠統了人們對堆棧溢出來能夠幫助你,我想。 – tehgeekmeister

+0

增加了一些更多細節。我希望這些細節足以提供一個答案(或者說這是不可能的)。 –

+0

這更接近於在這裏可以得到答案的問題,但我無法爲您提供幫助,因爲我對這些插件不熟悉。另外,我還沒有完全理解這個問題。 – tehgeekmeister

回答

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)