1

Railsアプリケーションで認証とアクセス許可を管理するためにdeviseとcancan gemを使用しています。アプリケーションは、ライブラリ管理に関するものです。次のように、ability.rb 内でメソッドを定義しました。

def lend
  can :manage, Book
  can :manage, Transactions
end

次に、ability.rb で、次のようにアクセス許可を割り当てました。

if user.role? == "librarian" 
  can lend
end

ビューでは、「ライブラリアン」ロールを持つユーザーに対してcan?(:manage, Book)またはを使用できます。can?(manage, Transaction)

でも、使えるようになりたいcurrent_user.can?(:lend)この github ページに従って、can? ユーザーモデル内で利用可能なメソッド。これにより、使用できます

current_user.can?(:manage, Book)

しかし、current_user.can?(:lend)結果は になりwrong number of arguments(1 for 2+)ます。ここで少し知性が欠けているような気がします。私はグーグルと関連記事をここで試しましたが、役に立ちませんでした。助けてください。

4

1 に答える 1

0

can?次の 2 つの必須引数があります。

def can?(action, subject, *extra_args)

したがって:wrong number of arguments(1 for 2+)

cancan/lib/cancan/ability.rb:56を参照

また、あなたのability.rb(以下)にはaction、名前もsubject名前もありません:lend。メソッド名は cancan とは無関係です。

def lend
  can :manage, Book
  can :manage, Transactions
end

if user.role? == "librarian" 
  can lend
end
于 2013-07-22T05:06:50.033 に答える