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

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

ただいまの
回答率

89.10%

RubyOnRails ルーティングエラーとなり、正しく表示がされない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,949

webillion

score 32

前提・実現したいこと

教本(RubyOnRails5超入門)に従いながら、RubyOnRailsで読書カードを作っています。「localhost:3000/cards/1」とURLを叩くと、読書カードが表示されるはずなのですが、エラーになってしまいます。
showアクションを実装中に以下のエラーメッセージが発生しました。
分かる方、アドバイス願います。下記、エラー文と追加したコードになります。

発生している問題・エラーメッセージ

Routing Error
No route matches [GET] "/cards"

Rails.root: C:/Users/daino/Desktop/RailsApp

Application Trace | Framework Trace | Full Trace
Routes

Routes match in priority from top to bottom

Helper    HTTP Verb    Path    Controller#Action
Path / Url        
Path Match
cards_index_path    GET    /cards/index(.:format)    
cards#index

cards_show_path    GET    /cards/show(.:format)    
cards#show

cards_add_path    GET    /cards/add(.:format)    
cards#add

cards_edit_path    GET    /cards/edit(.:format)    
cards#edit

GET    /people/delete/:id(.:format)    
people#delete

GET    /people/edit/:id(.:format)    
people#edit

POST    /people/edit/:id(.:format)    
people#update

people_index_path    GET    /people/index(.:format)    
people#index

people_path    GET    /people(.:format)    
people#index

people_add_path    GET    /people/add(.:format)    
people#add

POST    /people/add(.:format)    
people#create

GET    /people/:id(.:format)    
people#show

helo_path    POST    /helo(.:format)    
helo#index

helo_index_path    POST    /helo/index(.:format)    
helo#index

helo_other_path    GET    /helo/other(.:format)    
helo#other

GET    /helo/index(.:format)    
helo#index

GET    /helo(.:format)    
helo#index

Request

Parameters:

None
Toggle session dump
Toggle env dump
Response

Headers:

None

該当のソースコード

20170403090910_create_cards.rb

class CreateCards < ActiveRecord::Migration[5.0]
  def change
    create_table :cards do |t|
      t.text :title
      t.text :author
      t.integer :price
      t.text :publisher
      t.text :memo

      t.timestamps
    end
  end
end


cards_controller.rb

class CardsController < ApplicationController
  layout 'cards'

  def index
    @cards = Card.all
  end

  def show
    @card = Card.find(params[:id])
  end

  def add
    if request.post? then
      Card.create(card_params)
      goback
    else
      @card = Card.new
    end
  end

  def edit
    @card = Card.find(params[:id])
    if request.patch? then
      @card.update(card_params)
      goback
    end
  end
  def delete
    Card.find(params[:id]).destroy
    goback
  end
  private
  def card_params
    params.require(:card).permit(:title, :author, :price, :publisher, :memo)
  end
  private
  def goback
    redirect_to '/cards'
  end
end


index.html.erb

<h1>Cards#index</h1>
<p>※現在、登録されているデータの一覧です。</p>
<table width="100%">
<tr>
    <th>ID</th><th>題名</th>
        <th>著者</th><th colspan="2"></th>
</tr>
<%= @cards.each do |obj| %>
<tr>
    <td width="35px"><%= obj.id %></td>
    <td width="50px"><a href="/cards/<% = obj.id %>"><%= obj.title %></a></td>
    <td><%= obj.author %></td>
    <td width="40px"><a href="/cards/edit/<%= obj.id %>">編集</a></td>
    <td width="40px"><a href ="javascript:window.delData(<%= (obj.id.to_s + ",'".to_s + obj.title.to_s).html_safe %>');">削除</a></td>

</tr>
<% end %>
</table>
<p class ="link"><a href="/cards/add">※新しいデータを入力 &gt;&gt;</a></p>

試したこと

・Routingの確認
・書き写しの抜け漏れチェック

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

cards_show_path    GET    /cards/show(.:format)    cards#show


ですが、この設定だと/cards/showというurlでないとcardsControllerのshowアクションに行きません

正しくは

cards_show_path    GET    /cards/:id(.:format)    cards#show


ではないでしょうか。
idを受け取るようにしましょう!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/05 16:21

    うーんと、その教本ですがちゃんと順番通りにやっていますか?
    エラーが出たのを無視して必要な処理を飛ばしているのではないでしょうか?
    その本自体は読んだことがないのでなんとも言えませんが、
    必ず、できているかどうかのチェックがあると思います。
    必ずチェックポイントを一つ一つ積み重ねてください。
    ちなみにこの場合はviewsのshow.html.erbがない状態です。

    キャンセル

  • 2017/04/05 16:47

    途中まではエラーを出さずに順調に進めていたのですが、質問で投稿した箇所を追加したところ、エラーが発生しました。見直してみます。

    キャンセル

  • 2017/04/05 17:09

    よく見直したところ、踏まえるべき手順を飛ばしていたことが分かりました。
    ご迷惑をおかけしました。
    ありがとうございます。

    キャンセル

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

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる