在我的能力中。我有
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
以协作者身份登录时,它不会过滤任务列表:
任务加载(1.4ms)SELECT“tasks”。* FROM“tasks”ORDER BY created_at DESC
但是,当我写这篇文章时:
def index
Task.all.order('created_at DESC')
end
以协作者身份登录时,它会过滤:
任务加载(0.9ms)SELECT“tasks”。* FROM“tasks”WHERE“tasks”。“user_id”= 2
但是没有订购上市!我不明白为什么它的行为不同,如何在不在控制器中添加额外逻辑的情况下进行过滤和排序?
我正在使用rails''4.1.4','devise''3.3.0','cancan''1.6.10'。
答案 0 :(得分:0)
我刚刚提出了以下解决方案:
def index
@tasks = Tasks.accessible_by(current_ability).all.order('created_at DESC')
end
它会过滤和订购:
任务加载(0.7ms)SELECT" tasks"。* FROM" taks"在哪里"任务"。" user_id" = 2 ORDER BY created_at DESC
出于某种原因,当使用当前能力进行呼叫时,它可以正常工作。