设计注销后删除方法返回错误

时间:2016-11-23 15:56:30

标签: ruby-on-rails ruby devise

我遇到了一个我不确定如何修复的问题。

我有一个简单的待办事项列表应用程序,其中包含'new','create','complete','delete'以及Devise身份验证等方法的AJAX功能。

当我第一次与用户进入新会话时,所有这些方法都可以正常运行。此外,任务仅保存到用户帐户,这是完美的。

但是,当我退出帐户,然后重新登录时,删除方法不再有效。我收到以下错误:

ActiveRecord::RecordNotFound (Couldn't find Task with 'id'=)

我的tasks_controller.rb如下:

class TasksController < ApplicationController
  def index
    @task = current_user.tasks.all
  end
  def new
    @task = Task.new
    respond_to do |format|
      format.js
      format.html
    end
  end
  def create
    @task = current_user.tasks.new(task_params)
    @task.save
    respond_to do |format|
      format.html
      format.js
    end
  end
  def update
    @task = current_user.tasks.find(params[:id])
    @task.toggle :complete
    @task.save
    respond_to do |format|
      format.html
      format.js
    end
  end
  def destroy
    @task = Task.find(params[:id])
    @task.destroy
    respond_to do |format|
      format.js
      format.html
    end
  end
  private
  def task_params
    params.require(:task).permit(:id, :title, :complete)
  end
end

我不确定如何解决这个问题。有人会对这里出了什么问题有所了解吗?

编辑:

我注意到在我的索引页面上,我有一个链接来销毁顶部的用户会话:

<%= link_to "Log Out", destroy_user_session_path, :method => :delete %>

我想知道rails是否遇到了一些问题,因为注销链接和删除链接都引用了相同的方法。如果是这样,我如何更改任务的删除方法的名称?

<div class="delete"><%= link_to "X", task_path(@task), method: :delete, remote: true %></div>

1 个答案:

答案 0 :(得分:0)

什么是@task引用?在我看来,您已将@task设置为集合@task = current_user.tasks.all。 这就是为什么您的删除方法无法找到要删除的特定记录的原因。

- 编辑 -

将索引控制器中的@task更改为@tasks,因为它是一个集合。 在您看来,请执行以下操作:

<% @tasks.each do |task| %>
 <div><%= task.title %><div class="delete"><%= link_to "X", task_path(task), method: :delete, remote: true %></div></div>
<% end %>

这里的关键是你有task_path(task)引用特定的任务ID而不是引用任务集合的task_path(@task)