2013-04-28 20 views
0

CanCan文檔對此似乎有點混淆。使用範圍來限制CanCan中的功能

它提供這個例子:

can :read, Article, Article.published do |article| 
    article.published_at <= Time.now 
end 

其中published似乎是一個範圍。但是,這不是多餘的嗎?它只查詢已發佈的文章,然後該塊根據當前時間過濾文章,看起來完全一樣,假設沒有文章發佈在將來

我目前正在做這樣的事情:

can :validate, User.without_validation_finished 
can :invalidate, User.with_validation_requested 

而且它似乎是按預期工作,即對那些範圍以外的用戶,我沒有得到訪問這些行動。我應該使用像我目前正在做的範圍,或者將其更改爲塊?我想這也可能有一些性能上的差異

回答

1

範圍用於索引操作,因爲沒有單個製品(@article)存在。當存在@article時,該塊用於顯示操作。

+0

,這也將表明我:驗證和:無效的行動將使用塊,因爲他們在一個單一@user就像表演動作進行操作。這意味着我不會得到正確的行爲,我似乎目前有 – Naps62 2013-04-28 00:25:43