これに関する 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
そして、期待どおりに機能しているようです。つまり、これらのスコープ外のユーザーの場合、それらのアクションにアクセスできません。現在行っているようにスコープを使用するか、これをブロックに変更する必要がありますか? これにもいくつかのパフォーマンスの違いがあるかもしれないと思います