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

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

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

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

Q&A

解決済

1回答

5227閲覧

【Ruby on Rails 5】ルーティングエラーの「No route matches [POST] "/コントローラ"」になる

pecchan

総合スコア555

Ruby on Rails

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

0グッド

0クリップ

投稿2017/07/31 04:15

編集2017/07/31 04:52

初歩的なことで恐れ入ります。

1画面で登録と更新を行う画面を作りましたが、
アクセス時に「No route matches」になります。

ルーティングの指定が原因でしょうが
何度見直しても分かりません。

分かる方宜しくお願い致します。

登録する内容は、日付と文章のシンプルなものです。

ruby

1 2#routes.rb 3Rails.application.routes.draw do 4 get '/poems/edit', to: 'poems#edit' 5 patch '/poems', to: 'poems#update' 6end 7 8#controller 9class PoemsController < ApplicationController 10 11 12 def edit 13 14 @date = params[:date] || Date.today 15 @poem = Poem.where(date: @date).first_or_initialize 16 17 end 18 19 20 def update 21 22 23 if @poems.update(params) 24 redirect_to poems_edit_path(date: params[:date]) 25 else 26 render :edit 27 end 28 end 29 30 31end 32 33#view 34<div class="container-fluid"> 35 <div class="row" style="margin-top:5%; margin-left: 10;"> 36 <div class="text-center"> 37 <div class="input-group" > 38 <%= text_field_tag('date', @date, id: 'poem_date', class: 'date-picker') %> 39 40 <%= form_for(@poem, url: poems_path) do |f| %> 41 <%= f.hidden_field :date %> 42 <%= f.text_area :poem, cols: "60", rows:"20" %> 43 <%= f.submit '登録', class: 'btn btn-primary btn-lg' %> 44 <% end %> 45 </div> 46 </div> 47 </div> 48</div> 49 50 51

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

登録はpostメソッドとなりますので、postのルーティングが必要です。
1個1個書いてもいいですが、restfulなurlは以下のように書くといいと思います。

routes.rb

1Rails.application.routes.draw do 2 resources :poems, only: [:edit, :update, :create] 3end

以下のページが参考になるかと思います

http://railsdoc.com/routes

追記

routes.rb

1Rails.application.routes.draw do 2 resources :poems, only: [:update, :create] do 3 collection do 4 get :edit 5 end 6 end 7end

投稿2017/07/31 10:37

編集2017/08/01 06:58
YukiYonekura

総合スコア127

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

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

pecchan

2017/07/31 23:00 編集

有難う御座います。 ルーティングをアドバイスの通り、以下のように修正し resources :poems, only: [:edit, :update, :create] app/poems/edit にアクセスすると、 「The action 'create' could not be found for PoemsController」 となります。 しかし、Createアクションは不要です。 なので ルーティングからcreateだけ除外し以下のようにしました。 resources :poems, only: [:edit, :update] すると、最初のエラー 「No route matches [POST] "/poems"」 となりました。
YukiYonekura

2017/08/01 02:47

レコードの新規作成時は、POSTメソッドが実行されます。 よって、controllerにcreateメソッドを追加して上げる必要があります。 更新時(PUT): updateメソッド 登録時(POST): createメソッド
pecchan

2017/08/01 06:43

有難う御座います。 度々申し訳ありません。 ルーティングをアドバイスの通り、以下のように修正し resources :poems, only: [:edit, :update, :create] controllerに以下を追加しました。 def create end そして app/poems/edit にアクセスすると 「No route matches [GET] "/poems/edit"」 となりました・・。
YukiYonekura

2017/08/01 06:58 編集

あー、要件を少し勘違いしていました。 回答に追記を行いました。
pecchan

2017/08/03 07:08

有難う御座いました。 本当は、controllerにcreateを置かず、 updateとeditだけで登録と更新を行いたいのですが 別質問にすることにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問