Ваши маршруты показывают:
todo_list_todo_item GET /todo_lists/:todo_list_id/todo_items/:id(.:format) todo_items#show
PATCH /todo_lists/:todo_list_id/todo_items/:id(.:format) todo_items#update
PUT /todo_lists/:todo_list_id/todo_items/:id(.:format) todo_items#update
DELETE /todo_lists/:todo_list_id/todo_items/:id(.:format) todo_items#destroy
Итак, помощник для маршрута DELETE:
todo_list_todo_item_path
не
todo_list_todo_items_path
(обратите внимание на изменение в'item' vs 'items')
Ваш код ссылки должен быть:
<%= link_to "Delete", todo_list_todo_item_path(@todo_list, todo_item.id), method: :delete, data: { confirm: "Are you sure?" } %>
Чтобы ответить на второй вопрос:
Ваши маршрутыshow:
DELETE /todo_lists/:todo_list_id/todo_items/:id(.:format)
Для этого маршрута требуются два параметра: идентификатор TodoList и идентификатор TodoItem .На маршруте они отображаются как : todo_list_id и : id .
Обратите внимание, как в вашем контроллере вы впервые находите список TodoList с помощью params [: todo_list_id] в before_action, и затем вы находите TodoItem для ассоциации с помощью params [: id] в действии.
В вашем link_to ,вам нужно передать оба параметра.
Руководство по Rails по маршрутизации , вероятно, вам следует прочитать, чтобы лучше понять, как все это работает: https://guides.rubyonrails.org/routing.html