2016-11-23 14 views
0

修正方法がわからないという問題が発生しています。削除ログアウト後にエラーを返すメソッドを削除する

私は、「新規」、「作成」、「完了」、「削除」、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 

私はこの問題を解決する方法を正確にはわかりません。誰がここで何がうまくいかないのか考えているだろうか?

EDIT:

私はインデックスページで、私が一番上にユーザのセッションを破壊するためのリンクを持っていることに気づい:

<%= 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 = current_user.tasks.all@taskを設定したように私に見えます。 あなたのdeleteメソッドは、削除する特定のレコードを見つけることができません。

-EDIT-

それがコレクションであるとして@tasksにあなたのインデックス・コントローラの変更@task。あなたのビューで は、ような何か:

<% @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

私はあなたのために私の答えを編集しました –

関連する問題