рельсы вложенных ресурсов нет совпадений маршрутов пропущен обязательный ключ [: id] - PullRequest
0 голосов
/ 13 сентября 2018

У меня очень простой случай вложенных ресурсов, но у меня проблемы с тем, чтобы заставить их работать.

Мои модели:

class TodoList < ActiveRecord::Base
    has_many :todo_items, dependent: :destroy

class TodoItem < ActiveRecord::Base
  belongs_to :todo_list

Мой контроллер:

class TodoItemsController < ApplicationController
  before_action :set_todo_list
  before_action :set_todo_item, only: [:show, :edit, :update, :destroy]

  def show
  end

  private
    def set_todo_item
      @todo_item = @todo_list.todo_items.find(params[:id])
    end

    def set_todo_list
      @todo_list = TodoList.find(params[:todo_list_id])
    end

Мой show.html.erb:

<%= link_to 'Edit', edit_todo_list_todo_item_path([@todo_item.todo_list, @todo_item]) %> 

Я получил ошибку

"No route matches {:action=>"edit", :controller=>"todo_items", :id=>nil, ...,  missing required keys: [:id].

Я знаю, что todo_item_id отсутствует, но я не мог понять, почему.Когда я отлаживал, я видел, что и @todo_list, и @todo_item получали значения.Но как только будет назначен @todo_item, эта ошибка возрастет.Что я сделал не так?Как я могу это исправить?Любые идеи будут оценены.

1 Ответ

0 голосов
/ 13 сентября 2018

Попробуйте это:

<%= link_to 'Edit', edit_todo_list_todo_item_path(@todo_item.todo_list, @todo_item) %>

или

<%= link_to 'Edit', edit_todo_list_todo_item_path(todo_list_id: @todo_item.todo_list.id, id: @todo_item.id) %>
...