如何在枚举字段中使用CanCanCan?

我得到了枚举字段enum status: [:pending, :done] 文章模型enum status: [:pending, :done]

这是我的能力档案

 class Ability include CanCan::Ability def initialize(user) user ||= User.new if user.member? can :read, Article.done end end end 

在视图中我试图为成员渲染Article.done集合但不是渲染渲染。

    

因此我有一个问题:在CanCanCan中有没有可能使用enum的方法?

我可能错了, 但我认为enum只会创建instance方法:

 @article = Article.find params[:id] @article.done? 

我错了 ……

还将提供基于枚举字段的允许值的范围。 通过上面的例子:

 Conversation.active Conversation.archived 

如果它不起作用我会删除它; 我会评估条件的哈希 ,而不是类本身:

 class Ability include CanCan::Ability def initialize(user) user ||= User.new if user.member? can :read, Article, status: Article.statuses[:done] end end end 

更新

需要考虑的几个重要事项。

首先,在使用hash条件时:

重要提示:如果存在条件或条件哈希值,则在检查类时将忽略它们,并且它将返回true。

这意味着在传递类时不能在“能力”上调用特定条件,必须在对象的实例上调用它。

其次, CanCanCan似乎有一些评估enum值的问题 ,这使得以下代码成为必要:

 #app/models/ability.rb class Ability include CanCan::Ability def initialize(user) user ||= User.new if user.member? can :read, Article do |article| article.done? end end end end 

然后你需要将article实例传递给can? 方法:

 #app/views/articles/index.html.erb  <%= render @articles %> 
#app/views/articles/_article.html.erb <% if can? :read, article %> Title: <%= article.title %> <%= article.status %> <% end %>