在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的情况下!)
答案 0 :(得分: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