Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么块中定义的CanCan总是返回true?_Ruby On Rails_Ruby On Rails 3_Cancan - Fatal编程技术网

Ruby on rails 为什么块中定义的CanCan总是返回true?

Ruby on rails 为什么块中定义的CanCan总是返回true?,ruby-on-rails,ruby-on-rails-3,cancan,Ruby On Rails,Ruby On Rails 3,Cancan,我试着用CanCan来定义一个区块中的能力。在ability.rb中,我的权限定义为: can [:create, :show], Comment do |comment| if !group.nil? is_a_group_member(current_user_group_member) == true elsif user.admin? is_a_user_admin(current_user) end end 不管发生什么,这都是真的。但是,如果我将该能

我试着用CanCan来定义一个区块中的能力。在ability.rb中,我的权限定义为:

can [:create, :show], Comment do |comment|
  if !group.nil?
      is_a_group_member(current_user_group_member) == true
  elsif user.admin?
    is_a_user_admin(current_user)
  end
end
不管发生什么,这都是真的。但是,如果我将该能力写在一行中:

can [:create, :show], Comment if (!group.nil? && is_a_group_member(current_user_group_member) == true) || (user.admin? && is_a_user_admin(current_user))

当ability.rb权限使用一行时,它将按预期工作。当我使用块时,它总是返回true。你有什么想法或想法来解释为什么会这样吗?谢谢

如果
else
部分是一个表达式,如果条件为false,则计算结果为
nil
,如果条件为true,则计算结果为条件代码计算结果的任何值


在您的情况下,在多行
if
,if
!group.nil?
为true,
为组成员(当前用户组成员)==true
返回。如果
user.admin?
为true,则返回
为\u用户\u管理员(当前用户)
。因此,如果其中任何一个为true,则将返回
true

gem的文档中明确说明,您应仅在资源本身的条件下使用块
仅当存在实际实例对象时才计算块。在检查类的权限时(例如在索引操作中),不会对其进行计算。这意味着任何不依赖于对象属性的条件都应移到块之外