使用范围限制CanCan中的能力

时间:2013-04-28 00:16:44

标签: ruby-on-rails scope 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 个答案:

答案 0 :(得分:1)

范围用于索引操作,因为没有单独的文章(@article)存在。当@article存在时,该块用于show动作。