1

在 Rap Genius 上,您需要一定数量的 Rap IQ 才能获得某些权限(在这方面就像 Stack Overflow)。我通过在我的以下添加这样的行来实现这一点ability.rb

can :create, Annotation do |a|
  user.rap_iq >= 500
end

但是,我需要能够将这一事实传达给用户。例如,在我的注释视图中,我可能有类似的东西:

<% unless can? :create, @annotation %>
  You need at least <%= CanCan::Ability.iq_required_to(:create, Annotation) %> Rap IQ to create annotations
<% end %>

(显然API是由lol组成的)

我的问题是如何最好地做到这一点——我确信这个问题之前已经解决了(例如,在 Stack Overflow 的案例中!)

4

1 回答 1

2

您可以以某种方式对该需求信息进行建模并将其显示给用户。

我不知道是否已经有办法用 cancan 做到这一点(我还没有在文档中看到它)但是你可以扩展CanCan::Ability类来响应iq_required_to,比如(它只是一个概念证明):

REQUIREMENTS[:annotation][:create] = 500

def iq_required_to(action, subject)
  REQUIREMENTS[subject][action]
end

然后你可以打电话iq_required_to(:create, :annotation)

当然,您应该更改您initialize的使用此信息:

can :create, Annotation do |a|
  user.rap_iq >= iq_required_to(:create, :annotation)
end
于 2012-04-07T17:06:53.403 回答