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は構成されています笑)

私の質問は、これを行うための最善の方法です。この問題は以前に解決されていると確信しています(たとえば、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 に答える