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

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

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

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

Router

Routerは、異なるネットワーク同士を相互に接続するための通信機器。インターネットでのデータを自動的に振り分け、一つのインターネット回線を複数のコンピュータで使用することが可能です。DHCPによりIPアドレスを自動的に割振りすることもできます。

Ruby

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

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Q&A

解決済

2回答

15262閲覧

No route matches [PATCH] が解決できない

niichaso

総合スコア17

Ruby on Rails 5

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

Router

Routerは、異なるネットワーク同士を相互に接続するための通信機器。インターネットでのデータを自動的に振り分け、一つのインターネット回線を複数のコンピュータで使用することが可能です。DHCPによりIPアドレスを自動的に割振りすることもできます。

Ruby

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

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

0グッド

2クリップ

投稿2018/09/27 01:55

編集2018/09/27 02:32

こんにちは。
プログラミング初心者です。

現在、Railsでフリマサイトを作成しておりまして、
出品した商品の編集ができません。

#エラー内容
No route matches [PATCH] "/users/products"

#products_controller.rb

ruby

1def edit 2 #ユーザーの商品詳細編集 3 @product = Product.find(params[:id]) 4 end 5 6 def update 7 upload_file = params[:product][:image1] 8 #投稿画像がない場合 9 if upload_file.present? 10 #画像のファイル名取得 11 upload_file_name1 = upload_file.original_filename 12 output_dir = Rails.root.join('public', 'images') 13 output_path = output_dir + upload_file_name1 14 File.open(output_path, 'w+b') do |f| 15 f.write(upload_file.read) 16 end 17 @product.image1 = upload_file_name1 18 end 19 if @product.save 20 flash[:success] = '商品情報を更新しました' 21 redirect_to top_path and return 22 else 23 flash[:danger] = '更新に失敗しました' 24 redirect_to edit_product_path and return 25 end 26 end

#routes.rb

Ruby

1Rails.application.routes.draw do 2 3 root 'products#index', as: :root 4 5 post '/', to: 'products#index' 6 7 post '/', to: 'products#create' 8 9 get 'users/profiles', to: 'users#top', as: :top 10 11 get 'users/sign_up', to: 'users#new', as: :sign_up 12 13 post 'users/sign_up', to: 'users#create' 14 15 get 'users/sign_in', to: 'users#sign_in', as: :sign_in 16 17 post 'users/sign_in', to: 'users#sign_in_process' 18 19 get 'users/sign_out', to: 'users#sign_out', as: :sign_out 20 21 get 'users/products', to: 'users#products', as: :user_products 22 23 post 'users/products', to: 'products#create' 24 25 get '/users/products/new', to: 'products#new', as: :new_product 26 27 get '/users/products/:id', to: 'users#product', as: :user_product 28 29 delete '/users/products/:id/', to: 'products#destroy' 30 31 get '/users/products/:id/edit', to: 'products#edit', as: :edit_product 32 33 patch '/users/products/:id/edit', to: 'products#update' 34 35 get '/users/likes', to: 'users#likes', as: :user_likes 36 37 get '/users/profiles/edit', to: 'users#edit', as: :edit_user 38 39 post '/users/profiles/edit', to: 'users#update' 40 41 get '/markets/:id', to: 'products#show', as: :product 42 43 get '/markets/:id/payment', to: 'products#payment', as: :payment 44 45 get '/markets/:id/payment_complete', to: 'products#payment_complete', as: :payment_complete 46 47 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 48end

似たような質問やサイトを参考にしましたが、解決できません。
説明不足で申し訳ございませんが、何卒よろしくお願い致します。

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

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

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

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

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

dice142

2018/09/27 02:17

コードはコードブロック(```で囲む)を使ってください。その際はファイルごとに分けてもらえると助かります。
niichaso

2018/09/27 02:33

申し訳ございません。そのような機能があると存じておりませんでした。ご丁寧にお教えいただきありがとうございます。
dice142

2018/09/27 03:07

ちなみに質問は「商品情報の変更を保存できない」ことですか?それとも「エラーの解決方法がわからない」ことですか?
niichaso

2018/09/27 03:17

説明不足で申し訳ございません。「質問はエラーの解決方法がわからない」です。よろしくお願い致します。
guest

回答2

0

エラーの原因は/users/productsというパスにPATCHで送信するのに対し、
routes.rbにその設定がないからです。

routes.rbには

get 'users/products', to: 'users#products', as: :user_products post 'users/products', to: 'products#create'

とあるようにGET, POSTでの設定はありますが、PATCHの設定はありません。

また、PATCHの設定があるパスは

patch '/users/products/:id/edit', to: 'products#update'

こちらなので、送信するメソッドが間違っているか、パスが間違っているかのどちらかになります。

あと、パスの頭に/があるものとないものとごっちゃになってますが、意図したものなのでしょうか?

投稿2018/09/27 03:31

dice142

総合スコア5158

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

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

0

ベストアンサー

原因は、route.rbpatch '/users/products' がない
もしくは、送信するURLが間違っているのどちらかですね。
おそらく後者だと思いますが...。
後者であればviewファイルのフォームの送信先をもう一度確認してみてください。

投稿2018/09/27 03:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

niichaso

2018/09/27 04:24

viewファイルの送信先が間違っておりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問