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

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

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

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

HTTP

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

POST

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

Ruby on Rails

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

Q&A

1回答

1300閲覧

[Rails]HTTPリクエストメソッドについて、GETメソッドをPOSTメソッドにしたいです。ご教示お願いします、、

suirunakamura

総合スコア16

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

HTTP

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

POST

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/08/09 03:39

編集2020/08/14 01:49

記事投稿機能の実装をしているところ、Webブラウザ上にて下記のようなエラーが表示されてしまいました。
https://gyazo.com/44a6cc57502052dcd62e2347ada801f0

Routing Error No route matches [POST] "/post/new" Rails.root: /Users/apple/create/portfolio Application Trace | Framework Trace | Full Trace Routes Routes match in priority from top to bottom

これは、ルーティングのエラーで、本来は、POSTメソッドでなきゃいけないものを、GETメソッドになっていてデータが送れない?というエラーだと仮説しています。

『追記です』

コントローラーファイルとフォームページのviewファイルとルーティングファイルを載せました。posts_controller.rbファイルの中の記述で、newアクションとcreateアクションで同じ記述をしていますが、これはどちらでコードが動いているのか確認していました。今後修正していきます。今回のエラーは、フォームを作成中に起きたので原因はこの三つのファイルかなと思っています。ファイルの確認をどうかよろしくお願いします。。

『追記です』

posts/new.html.haml

= render partial: 'shared/header' %body .container .row .col-md-8.col-md-offset-2 %h2 ブログ記事投稿・編集 = form_with local:true, model: @article do |f| .form-date.form-group .blog-name %label.blog-label 日付 = f.date_field :dating, class: "input-time", name: "post_date", size: "20", placeholder: "日付を入力してください", style: "font-weight: bold;" .form-title.form-group .blog-name %label.blog-label タイトル = f.text_field :title, class: "input-title", name: "title", placeholder:"タイトルを入力してください。", style: "font-weight: bold;" .form-letter.form-group .blog-name %label.blog-label 本文 = f.text_area :text, class: "input-control", rows: "15", name: "body", placeholder: "本文を入力してください。", style: "font-weight: bold;" .form-input = f.submit class: "btn btn-primary btn-sm", value: "投稿する"

posts_controller.rb

class PostsController < ApplicationController class Posts def new @article = Article.new(blogs_params) # インスタンスに保存成功した場合の処理 if @article.save flash[:success] = "ユーザーを登録しました" redirect_to @article # インスタンスの保存に失敗した場合の処理 else flash[:danger] = "ユーザーの登録に失敗しました" render :new end end 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ページで確認できます。

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

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

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

maisumakun

2020/08/17 06:30

PostsControilerの中にPostsを定義しているのは、どういう意図があってでしょうか?
suirunakamura

2020/08/18 03:03

このPostsは、間違えで消しました。申し訳ありません。
guest

回答1

0

= form_with url: posts_path local: true

でどうでしょうか?

投稿2020/08/12 23:18

編集2020/08/15 05:44
nasuk47

総合スコア311

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

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

suirunakamura

2020/08/14 01:41

返信遅れすみません。回答ありがとうございます!コードの挿入を最初の質問の追記で載せます。 確認をどうかお願いします。
nasuk47

2020/08/14 11:00

回答を編集しました。ご確認お願いします。
suirunakamura

2020/08/15 05:31

返信遅れ申し訳ありません。今確認しました。回答ありがとうございます! 今、試してみます。
suirunakamura

2020/08/15 05:42

試した結果エラーの解決にはいたりませんでした。やはり、モデルを作成した際の、モデル名をarticleにしたところに原因があるのでしょうか? Posts_controller.rb内のnewアクション・createアクション内では、@post = Article.newという記述にしております
nasuk47

2020/08/15 05:45

form_withはデフォルトのhttpメソッドがpostなため url: posts_pathでposts#createに飛ぶと思います。
nasuk47

2020/08/15 05:46

回答の方も変更しました。
suirunakamura

2020/08/15 06:01

回答みました!ありがとうございます!エラーが変わりました。おそらくurlでの指定でいいと思います。下記のようなエラーに変わりました。 https://gyazo.com/2b77b972b08ac863309f9aeca60e91d2 Unknown action The action 'create' could not be found for PostsController あとは、アクションの設定なんですけど、posts_contoroller.rbでは、createアクションも定義しているんですけど、、
suirunakamura

2020/08/15 06:01

どこか、おかしい記述でもありそうですかね、、
nasuk47

2020/08/15 06:11

class postの記述が不要かもしれません
suirunakamura

2020/08/15 07:07

ありがとうございます!どうやら、いらなかった?ようです。 エラーが変わりました。 https://gyazo.com/997b9fc329637410eac55e294e2a396b ActionController::ParameterMissing in PostsController#create param is missing or the value is empty: article Extracted source (around line #36): 34 35 36 37 38 private def blogs_params params.require(:article).permit(:dating, :title, :text) end end
nasuk47

2020/08/15 07:18

articleのvalueが空と表示されていますね。 パラメータはどのような形で値が送られていますか?
suirunakamura

2020/08/15 08:10

webブラウザ上で、paramsを入力しデータが渡されていたのか確認してみました。下記のように、一応渡せてた?ように思えます。 https://gyazo.com/e39fb36b350e8c3810c8421965da1960 どこかが指定できていない?関連性がない?とかありそうですか?
nasuk47

2020/08/15 08:13

説明不足で申し訳ありません。 投稿するボタンをクリック=> createアクションまでは行けたと思っています。 なのでそのcreateアクションにはフォームで送られたパラメータが存在します。 以下例 Parameters: {"authenticity_token"=>"9Zl0Eie5+/3ZIdv7iGfJs8VnIWE+31VecQUwF5hFonTkBgxDLgyckVwEOVMRlRG1aMvm3uIM/8tUSPWHmXJCOg==", "post"=>{"title"=>"タイトル1", "content"=>"コンテンツ1"}, "commit"=>"更新", "id"=>"1"} このデータも質問の欄に追記をお願いします。
suirunakamura

2020/08/15 08:45

https://qiita.com/Takka_Log/items/32dae78d7e3892e7b051 上記の記事を参考にしました。 paramsのrequireの記述を消し、permit以下のだけにしたら、データが渡るようになりました! お時間を奪ってしまい申し訳ありませんでした、、親切にご教授いただきありがとうございました。とても、勉強になりました。わかりやすかったです。 squel ace: https://gyazo.com/690d862d04ccb5b58abe85ff9edfbfee ターミナル: https://gyazo.com/93fa57c4cc81ae97c35763e89204f158 しかし、下記のターミナル・squel aceの表をみると、titleだけデータの譲渡に成功し、日付と本文が失敗しています。おそらく、この二つの情報を渡す際のname属性?が指定されていて、それがカラム名と一致しないので、はねられてしまったと仮定しています。下の画像は、フォームのviewのコードです。 一番目のフォームと3番目のフォームが渡せていない問題のフォームです。 https://gyazo.com/3d9599cf058dcd136fcbe7cbb29fe9df ここのname属性が、カラム名と一致していなかったので、カラム名と同じ名前を指定しました。しかし、ターミナルのパラメーターをみると、変わらず、前に指定していたname属性でした。ここを変える方法?または、違うところで指定しているのかも? 愚問ですが、またご教授いただきたいです、、
suirunakamura

2020/08/15 09:19

すみません、突然新たなエラーが発生しました、、 https://gyazo.com/74046d626cbd10e2300c8c76a775450f routes.rbにonly => [new, create]を付け加え、newとcreateアクション(つまり、POST・GET)しか使えないはずなのに、PATCHが当たってしまいます。。 どうか、ご教授ください、、
nasuk47

2020/08/15 12:45

質問のコードに変更はありませんか? もしある場合は面倒かもしれませんが修正をお願いします。 PostsControllerのnewアクションは修正した方がいいと思います。 @article = Article.new のみにするように
suirunakamura

2020/08/16 02:03

わかりました。やってみます。
nasuk47

2020/08/16 02:40

はい! https://qiita.com/nasuka/items/34f082536d47bbf0f28e 一応1つのモデルのCRUDの実装について詳しく記事にしてみたのでもしお時間ありましたら一読お願いします。 で、もしわからない点等ありましたらコメントしてください。
suirunakamura

2020/08/16 03:13

ありがとうございます!学習してみます!!
suirunakamura

2020/08/16 03:40

すみません、rails routesコマンドを実行した際の、postsの下についてるルーティングはデフォルトでついているものなのでしょうか?定義していないと思うのですが、ついているものなのでしょうか? 愚問で申し訳ありません、もっと調べてみます。。 https://gyazo.com/5bdc074ead66b5c535460579baa29b12 rooter:portfolio apple$ rails routes Prefix Verb URI Pattern Controller#Action root GET / top#index posts GET /posts(.:format) posts#index POST /posts(.:format) posts#create new_post GET /posts/new(.:format) posts#new edit_post GET /posts/:id/edit(.:format) posts#edit post GET /posts/:id(.:format) posts#show PATCH /posts/:id(.:format) posts#update PUT /posts/:id(.:format) posts#update DELETE /posts/:id(.:format) posts#destroy rails_postmark_inbound_emails POST /rails/action_mailbox/postmark/inbound_emails(.:format) action_mailbox/ingresses/postmark/inbound_emails#create rails_relay_inbound_emails POST /rails/action_mailbox/relay/inbound_emails(.:format) action_mailbox/ingresses/relay/inbound_emails#create rails_sendgrid_inbound_emails POST /rails/action_mailbox/sendgrid/inbound_emails(.:format) action_mailbox/ingresses/sendgrid/inbound_emails#create rails_mandrill_inbound_health_check GET /rails/action_mailbox/mandrill/inbound_emails(.:format) action_mailbox/ingresses/mandrill/inbound_emails#health_check rails_mandrill_inbound_emails POST /rails/action_mailbox/mandrill/inbound_emails(.:format) action_mailbox/ingresses/mandrill/inbound_emails#create rails_mailgun_inbound_emails POST /rails/action_mailbox/mailgun/inbound_emails/mime(.:format) action_mailbox/ingresses/mailgun/inbound_emails#create rails_conductor_inbound_emails GET /rails/conductor/action_mailbox/inbound_emails(.:format) rails/conductor/action_mailbox/inbound_emails#index POST /rails/conductor/action_mailbox/inbound_emails(.:format) rails/conductor/action_mailbox/inbound_emails#create new_rails_conductor_inbound_email GET /rails/conductor/action_mailbox/inbound_emails/new(.:format) rails/conductor/action_mailbox/inbound_emails#new edit_rails_conductor_inbound_email GET /rails/conductor/action_mailbox/inbound_emails/:id/edit(.:format) rails/conductor/action_mailbox/inbound_emails#edit rails_conductor_inbound_email GET /rails/conductor/action_mailbox/inbound_emails/:id(.:format) rails/conductor/action_mailbox/inbound_emails#show PATCH /rails/conductor/action_mailbox/inbound_emails/:id(.:format) rails/conductor/action_mailbox/inbound_emails#update PUT /rails/conductor/action_mailbox/inbound_emails/:id(.:format) rails/conductor/action_mailbox/inbound_emails#update DELETE /rails/conductor/action_mailbox/inbound_emails/:id(.:format) rails/conductor/action_mailbox/inbound_emails#destroy rails_conductor_inbound_email_reroute POST /rails/conductor/action_mailbox/:inbound_email_id/reroute(.:format) rails/conductor/action_mailbox/reroutes#create rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create
nasuk47

2020/08/16 07:42

そうですねデフォルトでついているものと思ってかまいません。 僕もそこまで気にしていませんでした。 おそらくあまり使うことはないと思います。
suirunakamura

2020/08/17 06:15

そうなんですね、厄介なものではなくてよかったです。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問