2016-05-07 22 views
0

私のコードを実行しようとすると、上記の問題が発生しました。必要なキーがありません:[:id] rails

def destroy 
    @list = ToDoList.find(params[:to_do_list_id]) 
    @task = @list.tasks.find(params[:id]) 
    if @task.destroy 
     redirect_to(:back) 
    else 
     redirect_to(:back) 
    end 
end 

と私のルート: はここに私のtasks/_task.html.erb

<% @list.tasks.each do |task| %> 
    <p> 
     <%= task.name %><%= task.id %> 
     <%= link_to "Destroy", to_do_list_task_path(@list, task.id), method: :delete %> 
    </p> 
<% end %> 

自分のタスクコントローラの

resources :to_do_lists do 
    resources :tasks 
end 

フルエラー:

No route matches {:action=>"show", :controller=>"tasks", :id=>nil, :to_do_list_id=>"157"} missing required keys: [:id] 

任意のアイデア?

EDITのto_do_listのコントローラー:

def show 
    @list = @user.to_do_lists.find(params[:id]) 
    @task = @list.tasks.new 
    @build = @list.tasks.build 
end 

はEDIT 2フルエラー:

@build = @list.tasks.build 

これはlist.tasksに保存されていないタスクオブジェクトを追加します。

[localhost] [::1] [6d1ad8d6-bfdf-4c] Started GET "/to_do_lists/158" for ::1 at 2016-05-07 09:14:37 +0200 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Started GET "/to_do_lists/158" for ::1 at 2016-05-07 09:14:37 +0200 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Processing by  ToDoListsController#show as HTML 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Processing by ToDoListsController#show as HTML 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Parameters: {"id"=>"158"} 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Parameters: {"id"=>"158"} 
[localhost] [::1] [6d1ad8d6-bfdf-4c] User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 24]] 
[localhost] [::1] [6d1ad8d6-bfdf-4c] User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 24]] 
[localhost] [::1] [6d1ad8d6-bfdf-4c] ToDoList Load (0.4ms) SELECT "to_do_lists".* FROM "to_do_lists" WHERE "to_do_lists"."user_id" = $1 AND "to_do_lists"."id" = $2 LIMIT 1 [["user_id", 24], ["id", 158]] 
[localhost] [::1] [6d1ad8d6-bfdf-4c] ToDoList Load (0.4ms) SELECT "to_do_lists".* FROM "to_do_lists" WHERE "to_do_lists"."user_id" = $1 AND "to_do_lists"."id" = $2 LIMIT 1 [["user_id", 24], ["id", 158]] 
[localhost] [::1] [6d1ad8d6-bfdf-4c] (0.3ms) SELECT COUNT(*) FROM "tasks" WHERE "tasks"."to_do_list_id" = $1 [["to_do_list_id", 158]] 
[localhost] [::1] [6d1ad8d6-bfdf-4c] (0.3ms) SELECT COUNT(*) FROM "tasks" WHERE "tasks"."to_do_list_id" = $1 [["to_do_list_id", 158]] 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."to_do_list_id" = $1 [["to_do_list_id", 158]] 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."to_do_list_id" = $1 [["to_do_list_id", 158]] 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Rendered tasks/_task.html.erb (5.3ms) 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Rendered tasks/_task.html.erb (5.3ms) 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Rendered to_do_lists/show.html.erb within layouts/application (7.6ms) 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Rendered to_do_lists/show.html.erb within layouts/application (7.6ms) 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Completed 500 Internal Server Error in 17ms (ActiveRecord: 1.4ms) 
[localhost] [::1] [6d1ad8d6-bfdf-4c] Completed 500 Internal Server Error in 17ms (ActiveRecord: 1.4ms) 
[localhost] [::1] [6d1ad8d6-bfdf-4c] 
ActionView::Template::Error (No route matches {:action=>"show", :controller=>"tasks", :id=>nil, :to_do_list_id=>"158"} missing required keys: [:id]): 
2: <% @list.tasks.each do |task| %> 
3:  <p> 
4:   <%= task.name %><%= task.id %> 
5:   <%= link_to "Supprimer", to_do_list_task_path(@list, task), method: :delete %> 
6:  </p> 
7: <% end %> 
8: </div> 
    app/views/tasks/_task.html.erb:5:in `block in _app_views_tasks__task_html_erb___979180469130099435_70290175534220' 
    app/views/tasks/_task.html.erb:2:in `_app_views_tasks__task_html_erb___979180469130099435_70290175534220' 
    app/views/to_do_lists/show.html.erb:7:in `_app_views_to_do_lists_show_html_erb__2820495566946140584_70290199271140' 
+0

このビューをレンダリングするコントローラアクションはどのように見えますか? –

+0

コントローラアクションを追加しました。 –

+0

@Ilya、同じ問題 –

答えて

4

あなたはこれをやっているので、それはですコレクション。保存されていないので、idはnilでリンクできません。

タスクが保存されていない場合は、「削除」リンクをスキップしてください(persisted?はfalseです)。

+0

<%= task.id%>がビュー上で動作するため、タスクオブジェクトが保存されると思います –

+0

task.idはうまくいきます - 保存されていない1つのタスクに対してnilを返すだけです –

+0

ありがとう!どうすれば問題を解決できますか? @buildを削除しようとしましたが、彼のロジックをビューに入れましたが、問題はまだここにあります –

関連する問題