🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

1回答

665閲覧

Ruby on Rails Routing Errorについて

mayuphoo

総合スコア13

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2021/01/15 14:07

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
Ruby on Railsで、簡単なツイート投稿機能を作っています。
ツイート編集をして、Submitボタンを押したところ、以下のエラーメッセージが発生しました。

Routing Error

No route matches [PATCH] "/prototypes" Routes match in priority from top to bottom

routes.rb

routes.rb

1Rails.application.routes.draw do 2 devise_for :users 3 root to: "prototypes#index" 4 resources :prototypes, only: [:new, :create, :show, :edit, :update,] 5end 6

prototypes_controller

prototypes_controller

1class PrototypesController < ApplicationController 2 def index 3 @prototypes = Prototype.all 4 end 5 6 def new 7 @prototype = Prototype.new 8 end 9 10 def create 11 @prototype = Prototype.new(prototype_params) 12 if @prototype.save 13 redirect_to root_path 14 else 15 render action: :new 16 end 17 end 18 19 def show 20 @prototype = Prototype.find(params[:id]) 21 end 22 23 def edit 24 @prototype = Prototype.find(params[:id]) 25 end 26 27 def update 28 prototypes = Prototype.find(params[:id]) 29 if prototype.update(prototype_params) 30 redirect_to prototype_path 31 else 32 render :edit 33 end 34 end 35 36 private 37 def prototype_params 38 params.require(:prototype).permit(:title, :catch_copy, :concept, :image).merge(user_id: current_user.id) 39 end 40 41end 42 43 44### edit.html.erb 45 46```edit.html.erb 47<div class="main"> 48 <div class="inner"> 49 <div class="form__wrapper"> 50 <h2 class="page-heading">プロトタイプ編集</h2> 51 <%=render partial: "form" %> 52 </div> 53 </div> 54</div> 55
### _form.html.erb ```_form.html.erb <%= form_with model: @prototype, url: prototypes_path, local: true do |f|%> <div class="field"> <%= f.label :title, "プロトタイプの名称" %><br /> <%= f.text_field :title %> </div> <div class="field"> <%= f.label :catch_copy, "キャッチコピー" %><br /> <%= f.text_area :catch_copy, class: :form__text %> </div> <div class="field"> <%= f.label :concept, "コンセプト" %><br /> <%= f.text_area :concept, class: :form__text %> </div> <div class="field"> <%= f.label :image, "プロトタイプの画像" %><br /> <%= f.file_field :image %> </div> <div class="actions"> <%= f.submit "保存する", class: :form__btn %> </div> <% end %>

試したこと

・routes.rbファイルにて、updateの定義が間違っていないか確認しました。

補足情報(FW/ツールのバージョンなど)

'rails', '~> 6.0.0'を使用しています。
RoutingErrorだったので、ルート・アクション共にちゃんと定義されているか確認したのですが、原因が分からず困っています…
ご回答いただけると、とても助かります。
宜しくお願い致しますm(__)m

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

root to: "prototypes#index"でprototypesコントローラーのindexアクションを指定しているのに、

resources :prototypes, only: [:new, :create, :show, :edit, :update,]でinidexアクション

を指定していないので、エラーが出ていると思いますので、

onlyのところを消すか、

redirect_to root_pathをredirect_to "prototypes/show"にするかだと。

投稿2021/01/15 14:36

mbaby__8

総合スコア66

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

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

mayuphoo

2021/01/15 15:12

回答ありがとうございます! redirect_to root_pathをredirect_to "prototypes/show" にしても、 No route matches [PATCH] "/prototypes" のエラーが変わらず出てしまいました。 他には、コントローラーのonlyを消して、resources :prototypes だけの記述にしてみても、同じエラーが出てしまいます。 既存の記述だった、resources :prototypes, only: [:new, :create, :show, :edit, :update,] のなかに、:index をプラスすることも試してみましたが、変わらずエラーが出てしまいます…m(__)m
mbaby__8

2021/01/15 16:32

<%= form_with model: @prototype, url: prototypes_path,method: :get, local: true do |f|%> はどうですか?
mayuphoo

2021/01/16 02:08 編集

お返事、ありがとうございます。 上記のように、method: :get を足してみたら 、、、ruby No route matches [GET] "/prototypes" 、、、 のエラーが出ました。 ちなみにこのフォームの書かれていたファイルは、新規投稿のnew & create と、編集&更新のedit & update の兼用フォームとして作った、テンプレートファイルです。 今回のすでにedit & updateではすでにインスタンス変数に値が入っているので, 自動で仕分けしてくれるはずなのですが…
mbaby__8

2021/01/16 05:49

views/prototypes/内に index.html.erb show.html.erb edit.html.erb はあるんですよね?
mayuphoo

2021/01/16 06:05

はい、どれも作成済みで、views/prototypes/ 内にファイルはちゃんと存在しています
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問