[Rails]HTTPリクエストメソッドについてGETメソッドをPOSTメソッドにしたいです。ご教示どうかお願いします、、
Railsにて、記事投稿機能を実装しているところ、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メソッドの範囲ないでデータを渡そうとしていたところこのようなエラーになってしまったと仮説を立てています。rails routesコマンドを実行し、ルーティングを確認すると下記のような表示になります。
rooter:portfolio apple$ rails routes
Prefix Verb URI Pattern Controller#Action
root GET / top#index
post_index GET /post(.:format) post#index
POST /post(.:format) post#create
new_post GET /post/new(.:format) post#new
edit_post GET /post/:id/edit(.:format) post#edit
post GET /post/:id(.:format) post#show
PATCH /post/:id(.:format) post#update
PUT /post/:id(.:format) post#update
DELETE /post/:id(.:format) post#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
このターミナルの表示をみてみると、newアクションよりも先に、createアクションが来ています。今回のエラーはおそらくnewアクション内(GETメソッド)で記事投稿のフォーム内容の登録を行ってしまっていることにあるので、これをcreateアクション内(POSTメソッド)で行えるようにしたいです。
postコントローラーファイルは下記のようになります。
class PostController < ApplicationController
class Post
def new
ストロングパラメータから精査されたデータだけをインスタンスに格納
@blog = Post.new(blogs_params)
# インスタンスに保存成功した場合の処理
if @blog.save
flash[:success] = "ユーザーを登録しました"
redirect_to @blog
# インスタンスの保存に失敗した場合の処理
else
flash[:danger] = "ユーザーの登録に失敗しました"
render :new
end
end
def create
end
private
def blogs_params
params.require(:articles).permit(:dating, :title, :text)
end
end
end
POSTコントローラーファイルを載せておきます。。
この問題の確認・返信・ご教示どうかよろしくお願いします。。