视图中的无限重复轨道4

时间:2016-07-09 07:34:11

标签: ruby-on-rails-4 devise cancancan

我是新手,所以请原谅任何愚蠢行为。 我正在构建一个用于任务管理的Web应用程序。我正在使用装饰和cancancan宝石。我想要的是当用户登录时,用户是管理员,然后应该出现所有任务。这是我application.html.erb文件中的一段代码,它正在执行此操作。

   <div class="container">
  <% if user_signed_in? %>
    <% if can? :index, Task %>
      <% controller.redirect_to tasks_path %>
    <% else %>
      <%= yield %>
    <% end %>
  <% else %>
    <%= yield %>
  <% end %>
</div>

现在每当用户登录时。浏览器会显示错误localhost redirected you too many times.,这意味着它将进入无限循环。有人可以帮我解决可能出现的问题吗?

1 个答案:

答案 0 :(得分:0)

问题出在您的重定向上。

由于您要从application.html.erb重定向到tasks_path,它会尝试使用application.html.erb加载任务的索引页面,该页面将再次将其重定向到tasks_path,使其成为无限的循环。

您的要求在您的问题中不明确但如果我理解正确,您正在尝试向管理员展示所有任务,而其他用户可以看到自己的任务。

为此,您可以在控制器本身准备@tasks

def index
  if can? :index, Task
    @tasks = Task.all
  else
    #assuming there is an user_id column for task
    @tasks = Task.find_by_user_id(current_user.id)
  end