视图中的无限重定向 rails 4

infinite rediect in views rails 4

我是 rails 的新手,所以请原谅我的愚蠢行为。 我正在构建一个用于任务管理的 Web 应用程序。我正在使用 devise 和 cancancan 宝石。我想要的是当用户是 logged_in,并且用户是管理员时,所有任务都应该出现。这是我的 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.,这意味着它会进入无限循环。任何人都可以帮我解决问题吗?

问题出在您的重定向上。

由于您从 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