ActionController的:: UrlGenerationError:缺少必需的键:[:编号

2019-09-26 13:17发布

我跑3 RSpec的测试和我得到同样的错误这一个特定的路径:

 Failure/Error: visit book_path
 ActionController::UrlGenerationError:
 No route matches {:action=>"show", :controller=>"books"} missing required keys: [:id]

我的测试没有完全结束,所以我敢肯定,一些后者的代码可能不正确。 但我不能让我的访问路径行运行:

...
book = FactoryGirl.build(:book)
reviews = FactoryGirl.build_list(:review, 5, book: book)

visit book_path

reviews.each do |review|
  expect(page).to have_content(review.rating)
  expect(page).to have_content(review.body)
  expect(page).to have_content(review.timestamp)
end

  expect(page).to have_content('House of Leaves')
  expect(page).to have_content('Mark Z. Danielewski')
  expect(page).to have_content('Horror')
end

在我的控制,我已经展示定义为:

def show
  @book = Book.find(params[:id])
  @reviews = @book.reviews.order('created_at DESC')
  @review = Review.new
end

而我的资源:

resources :books, only: [:index, :show, :new, :create] do
  resources :reviews, only: [:show, :new, :create] do
end

Answer 1:

因为你还没有定义预定你想参观它引发错误。 丢失的钥匙, id ,是本书的ID。 所以,你应该将其更改为:

book = FactoryGirl.build(:book)
reviews = FactoryGirl.build_list(:review, 5, book: book)

visit book_path(book)

请注意,您可以在ID直接(通过book_path(book.id)但如果你不这样做Rails会从传递的对象来推断。



文章来源: ActionController::UrlGenerationError: missing required keys: [:id]