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

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

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

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Q&A

1回答

999閲覧

No route matches [POST] "/posts/new" というエラー文が解決できません。ご教授お願いします、、

suirunakamura

総合スコア16

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

0グッド

0クリップ

投稿2020/08/12 09:34

現在、記事投稿機能を実装しています。フォームは、form_withを使いモデルを指定してデータを受け取りたいです。

posts/new.html.haml

Rails

1 %h2 ブログ記事投稿・編集 2 = form_with local:true, model: @article do |f| 3 .form-date.form-group 4 .blog-name 5 %label.blog-label 日付 6 = f.date_field :dating, class: "input-time", name: "post_date", size: "20", placeholder: "日付を入力してください", style: "font-weight: bold;" 7 .form-title.form-group 8 .blog-name 9 %label.blog-label タイトル 10 = f.text_field :title, class: "input-title", name: "title", placeholder:"タイトルを入力してください。", style: "font-weight: bold;" 11 .form-letter.form-group 12 .blog-name 13 %label.blog-label 本文 14 = f.text_area :text, class: "input-control", rows: "15", name: "body", placeholder: "本文を入力してください。", style: "font-weight: bold;" 15 .form-input 16 = f.submit class: "btn btn-primary btn-sm", value: "投稿する"

posts_controller.rb

class PostsController < ApplicationController class Posts def create # ストロングパラメータから精査されたデータだけをインスタンスに格納 @article = Article.new(blogs_params) # インスタンスに保存成功した場合の処理 if @article.save flash[:success] = "ユーザーを登録しました" redirect_to @article # インスタンスの保存に失敗した場合の処理 else flash[:danger] = "ユーザーの登録に失敗しました" render :new end end private def blogs_params params.require(:article).permit(:dating, :title, :text) end end end

routes.rb

Rails.application.routes.draw do # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html root to: "top#index" resources :posts end

作成したデータベースとテーブルも載せておきます。フォームの引数には、カラム名を指定しています。
リンク内容

どうか質問の確認と返信をよろしくお願いします。

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

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

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

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

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

winterboum

2020/08/12 09:36

posts/new.html.haml で使っている @article はどこで定義していますか? そのcodeも載せてください
suirunakamura

2020/08/12 09:37

二つ目のコードのpost_controller.rbで定義しています。
winterboum

2020/08/12 09:44

createはposts/new.html.hamlを呼び出すアクションでは無いですよね?
suirunakamura

2020/08/12 09:50

そうですが、posts_controller.rbのnewアクション内で、createアクションと同じ記述をしてもエラー文は変わらないのです。
maisumakun

2020/08/12 09:57

なぜposts_controllerでArticleを扱っているのでしょうか? (form_withは、引数として渡されたモデルからurlを決めます)
winterboum

2020/08/12 10:19

new と create では同じ記述ではだめです。 new は new.html の準備 create は newの後始末。 Post,Articleという所からするとよくあるSMS的なサイトを作っているのだたお思いますが、まだ無理では無いですか? その手のものはチュートリアルなどでたくさんあると思います。それらを写経して動くものを作ってから、その応用で自作してみるのが良いです。
suirunakamura

2020/08/14 01:25

new と create では同じ記述ではだめです。 new は new.html の準備 create は newの後始末。 > Post,Articleという所からするとよくあるSMS的なサイトを作っているのだたお思いますが、まだ無理では無いですか? その手のものはチュートリアルなどでたくさんあると思います。それらを写経して動くものを作ってから、その応用で自作してみるのが良いです。 返信ありがとうございます。もっと勉強してみます。ご教示ありがとうございます。
suirunakamura

2020/08/14 01:27

> なぜposts_controllerでArticleを扱っているのでしょうか? (form_withは、引数として渡されたモデルからurlを決めます) モデル名とコントローラ名に命名規制?があることを知らずに作成してしまいました。
winterboum

2020/08/14 04:24

規制ではなく 規約 です 規約 に則っておくと色々な宣言を省略出来る のです それに外れた命名を行うと、railsが勘違いするし、人間も勘違いします
suirunakamura

2020/08/14 04:42

ご教授ありがとうございます!知識が浅く申し訳ありません。
guest

回答1

0

No route matches [POST] "/posts/new"

「"/posts/new"にPOSTメソッドで送るルーティングはroutesはありません」と言われています。
resources :postsは"/posts"に対するPOSTメソッドのルーティングを定義してくれています。
"/posts/new"にPOSTメソッドを送ってもroutesにマッチしない、ということになります。

なぜ"/posts/new"にPOSTメソッドを送ってしまっているか?に関しては現時点では分からなかったのですが、以下3つあたりが怪しいかもしれません。

1

= form_with local:true, model: @article do |f|

@postでなく@articleを渡してしまっています。
/posts/newなので、@postを渡すのが普通な気がしています。

2
PostsControllerクラス内にさらにclass Postsでクラスを定義しようとしています。
もしかしたら単なる誤記かもしれませんが、ご確認下さい。

3
PostsController内のnewの中身はどうなっていますでしょうか?
ここで@post = Post.newみたいに定義して、form_with model: @postと渡しておく必要があります。

見当違いだったら申し訳ないです;;

投稿2020/08/15 10:29

kumackey

総合スコア59

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

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

suirunakamura

2020/08/15 10:41

返信ありがとうございます!実は、テーブル名・モデル名・コントローラ名と別の名前で作成してしまいました。articleテーブル・articleモデル・postsコントローラという風に、、 やはり、全て同じ名前で統一させないとうまく行かないですか? その場合、コントローラを別で新しく作成しようと思います。
kumackey

2020/08/15 10:47

> やはり、全て同じ名前で統一させないとうまく行かないですか? そうですねー。。 Railsだと、MVCの名前に規則があって、その規則に沿った名前を付けることが求められます。 ちょっと大変かもしれないですが、見た感じだとpostsではなくarticlesに統一すると良さそうに見えます。
suirunakamura

2020/08/16 04:09

返信ありがとうございます!そうですか、、基礎知識がなく申し訳ありません、、 わかりました。統一します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問