質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1733閲覧

railsmissing required keys: [:id]というエラーについて質問させて頂きます。

hanayoriinko

総合スコア3

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/05/15 13:52

編集2020/05/15 15:23

前提・実現したいこと

rails missing required keys: [:id]というエラーが解決できません。
当方rails初心者です。質問させて頂きます。

Showing /home/vagrant/work/bookers1-debug/app/views/books/index.html.erb where line #23 raised: No route matches {:action=>"show", :controller=>"books"}, missing required keys: [:id] <td><%= link_to 'Show', book_path(book)%></td> <td><%= link_to 'Edit', edit_book_path(book)%></td> <td><%= link_to 'Destroy', book_path, method: :delete, "data-confirm" => "Are you sure?" %></td> </tr> <% end %> コード

該当のソースコード

コントローラの記述

class BooksController < ApplicationController before_action :set_book, only: [:show, :edit, :update, :destroy] def index @book = Book.new @books = Book.all end def show @book = Book.find(params[:id]) end def edit @book = Book.find(params[:id]) redirect_to books_path end def create @book = Book.new(book_params) if @book.save flash[:notice] = 'Book was successfully created.' redirect_to book_path(@book) else render :index end end def update @book = Book.find(params[:id]) if @book.update(book_params) flash[:notice] = 'Book was successfully updated.' redirect_to book_path(@book) else render :edit end end

book indexの記述

<% if flash[:notice] %> <div class="flash"><%= flash[:notice] %></div> <% end %> <h1>Books</h1> <table> <thead> <tr> <th>Title</th> <th>Body</th> <th colspan="3"></th> </tr> </thead> <tbody> <% @books.each do |book| %> <tr> <td><%= book.title %></td> <td><%= book.body %></td> <td><%= link_to 'Show', book_path(book)%></td> <td><%= link_to 'Edit', edit_book_path(book)%></td> <td><%= link_to 'Destroy', book_path, method: :delete, "data-confirm" => "Are you sure?" %></td> </tr> <% end %> </tbody> </table> <h2>New book</h2> <%= render 'form', book: @book %> ```部分テンプレート部分

<% if flash[:notice] %>

<div class="flash"><%= flash[:notice] %></div> <% end %>

<%= form_for book do |f|%>
<% if book.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(book.errors.count, "error") %> prohibited this book from being saved:</h2>

<ul> <% book.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div>

<% end %>

<div class="field"> <%= f.label :title %> <%= f.text_field :title, class: "book_title" %> </div> <div class="field"> <%= f.label :body %> <%= f.text_area :body, class: "book_body" %> </div> <div class="actions"> <%= f.submit %> </div> <% end %>

routse

1

Rails.application.routes.draw do

resources :books

end

book.rbの記述

class Book < ApplicationRecord
validates :title,presence: true
validates :body,presence: true
end

schema.rbの記述

ActiveRecord::Schema.define(version: 2020_05_15_114226) do

create_table "books", force: :cascade do |t|
t.text "body"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "title"
end

end

ルート結果。

rails routes
Prefix Verb URI Pattern Controller#Action
books GET /books(.:format) books#index
POST /books(.:format) books#create
new_book GET /books/new(.:format) books#new
edit_book GET /books/:id/edit(.:format) books#edit
book GET /books/:id(.:format) books#show
PATCH /books/:id(.:format) books#update
PUT /books/:id(.:format) books#update
DELETE /books/:id(.:format) books#destroy
rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show
rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show
update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update
rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create

コード

### 試したこと No route matchesが出ていたため、コントローラのshowのrouteを確認したり,createのrenderなどを変更しましたが解決できず、ご質問させていただきます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yasumichi

2020/05/15 14:09

Book の方のソースも提示いただけますか? あと、ソースは以下のように書いていただくと読みやすいです。 ```ruby ここにソースを書く ``` 【参考】 対応しているMarkdownの記法を知りたい https://teratail.com/help#about-markdown
hanayoriinko

2020/05/15 14:23

ご丁寧に教えて頂きありがとうございます。 初めての質問だったため、やり方もわからず質問してしまいました。 コードの貼り付け方など教えてくださりありがとうございます。
winterboum

2020/05/15 14:29

routes.rbも載せてください
Yasumichi

2020/05/15 14:31

Book の model は作られていますか? それと、どこのサイトを参考に作られていますか?
Yasumichi

2020/05/15 14:33

No route matches を解決するには、config/routes.rb の提示やソースファイルのパスが分かるようにしておくと良いかもしれません。
hanayoriinko

2020/05/15 14:59

modelは制作しました。 現在、某スクールのカリキュラムを進めていて、デバックの処理をしております。 こちらの至らないところを、教えて頂きありがとうございます。。。
Yasumichi

2020/05/15 15:06

何度もごめんなさい。 全部のソースが頭切れというか、始めの方が表示されていないのですが、あえてそうしているのか、記法の問題なのかどちらでしょう? ``` の組み合わせがおかしいのかな…。
hanayoriinko

2020/05/15 15:16

私の記述の仕方が間違っていました。 大変申し訳ございません。
Yasumichi

2020/05/15 15:18

$ rails routes の結果を提示していただいてもよろしいでしょうか?
hanayoriinko

2020/05/15 15:33

反映させて頂きました。 お手を煩わさせて申し訳ないです。
guest

回答1

0

ベストアンサー

ruby

1 <td><%= link_to 'Show', book_path(book)%></td> 2 <td><%= link_to 'Edit', edit_book_path(book)%></td> 3 <td><%= link_to 'Destroy', book_path, method: :delete, "data-confirm" => "Are you sure?" %></td> 4

link_to 'Destroy' の次の引数が単に book_path となっていますが、book_path(book) の誤りではないでしょうか?

投稿2020/05/15 15:45

Yasumichi

総合スコア1773

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hanayoriinko

2020/05/15 15:51

教えていただいたように、コードを記述したところ、解決いたしました。 お時間かけてしまい申し訳ございません。 ありがとうございました!!
Yasumichi

2020/05/15 15:55 編集

なんか、最初に見せて頂いたソースをよく見れば、気づいたはずなのに色々、ソースを要求して、申し訳なかったです。(汗)
hanayoriinko

2020/05/16 05:34

こちらこそ、長い間付き合ってくださりありがとうございます。 おかげさまで、問題点をクリアすることができました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問