1
我跑3 RSpec的測試和我得到同樣的錯誤這一個特定的路徑:的ActionController :: UrlGenerationError:缺少必需的鍵:[:ID]
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
好的,我通過了和(book.id)給我一個較少糾結的錯誤消息。使用(book_path(book.id)),我得到:「沒有路由匹配{:action =>」show「,:controller =>」books「,:format => nil,:id => nil} [:id]「 – bonesjones
你正在編寫這本書,所以它不會被分配一個ID(因爲它還沒有保存到數據庫中)。把它改成'FactoryGirl.create(:book)',你應該很好。 –
哦!好吧,我沒有意識到,構建你不會得到一個ID,只是與創建。修復它,非常感謝你! – bonesjones