我正在使用devise和cancan gem来管理我的rails应用程序中的身份验证和权限。该应用程序是关于图书馆管理。我在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)
。我跟着 this github page做了罐头?用户模型中可用的方法。这允许我使用
current_user.can?(:manage, Book)
但是,current_user.can?(:lend)
会导致wrong number of arguments(1 for 2+)
。我有一种感觉,我在这里缺少一点智力。我试过谷歌和相关的帖子,但没有用。请帮忙。
答案 0 :(得分:0)
can?
有两个必需的参数:
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