1

我正在使用 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). 我按照这个github页面制作可以吗?方法在用户模型中可用。这允许我使用

current_user.can?(:manage, Book)

但是,current_user.can?(:lend)结果为wrong number of arguments(1 for 2+). 我有一种感觉,我在这里缺少一点智慧。我在这里尝试了谷歌和相关帖子,但无济于事。请帮忙。

4

1 回答 1

0

can?有两个必需的参数:

def can?(action, subject, *extra_args)

因此:wrong number of arguments(1 for 2+)

cancan/lib/cancan/ability.rb:56

此外,在您的ability.rb(下方)中,既没有 anaction也没有subjectnamed :lend。方法名称与 cancan 无关。

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

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