Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.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 4 使用cancan限制根据角色列出对象_Ruby On Rails 4_Devise_Cancan - Fatal编程技术网

Ruby on rails 4 使用cancan限制根据角色列出对象

Ruby on rails 4 使用cancan限制根据角色列出对象,ruby-on-rails-4,devise,cancan,Ruby On Rails 4,Devise,Cancan,以我的能力,我有 user ||= User.new if user.has_role? :admin can :manage, :all elsif user.has_role? :collaborator can :manage, Task, :user_id => user.id else can :read, Task, :user_id => user.id end 问题是,在TasksController中,当我编写以下内容时: def index

以我的能力,我有

user ||= User.new
if user.has_role? :admin
  can :manage, :all
elsif user.has_role? :collaborator
  can :manage, Task, :user_id => user.id
else
  can :read, Task, :user_id => user.id
end
问题是,在TasksController中,当我编写以下内容时:

def index
    @taks = Task.all.order('created_at DESC')
end
def index
    Task.all.order('created_at DESC')
end
以协作者身份登录时,它不会筛选任务列表:

任务加载(1.4ms)从描述处创建的“任务”顺序中选择“任务”。*

但是,当我写这篇文章时:

def index
    @taks = Task.all.order('created_at DESC')
end
def index
    Task.all.order('created_at DESC')
end
当以协作者身份登录时,它会过滤:

任务加载(0.9ms)从“任务”中选择“任务”。*其中“任务”。“用户id”=2

但不订购清单!我不明白为什么它的行为不同,我如何过滤和排序而不在控制器中添加额外的逻辑


我正在使用rails“4.1.4”、“Desive”3.3.0、“cancan”1.6.10。

我刚刚提出了以下解决方案:

def index
  @tasks = Tasks.accessible_by(current_ability).all.order('created_at DESC')
end
它会过滤和排序:

任务加载(0.7ms)选择“任务”。*从“taks”中选择“任务”。“用户id”=2订单由描述处创建

由于某些原因,当使用当前能力调用时,它会工作