2016-11-23 49 views
0

我遇到了一個問題,我不確定如何解決。設計註銷後刪除方法返回錯誤

我有一個簡單的列表應用程序,包括「新建」,「創建」,「完成」,「刪除」以及設計認證等方法上的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 %> 

我想知道,如果鐵軌是有一些麻煩與此因爲註銷鏈接和刪除鏈接都引用相同的方法。如果是這樣,我如何更改任務的刪除方法的名稱?

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

將byebug放在視圖中,並檢查@task的值。我認爲這不是整數類型。 –

+0

你在哪裏定義'@ task'? –

+0

@JagdeepSingh你是什麼意思?我不確定我明白。 – snovosel

回答

0

什麼是@task引用?它在我看來就像你已經設置@task收集@task = current_user.tasks.all。 這就是爲什麼你的刪除方法找不到要刪除的特定記錄。

CNC中

變化@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)這是引用任務的集合。

+0

我不知道我明白。我希望應用程序只顯示由current_user創建的任務,current_user幫助程序不會在索引方法中工作嗎? – snovosel

+0

您已將@task設置爲索引方法中的集合。我猜你認爲你有這樣的事情: –

+0

我編輯了我的答案 –