#対象者
- コメント投稿時に[PATCH]を呼び出すエラーに遭遇している方
#目的
- ルーティングエラーを解消して、正常に稼働させる
#実際の手順と実例
###1.前提
- コメント機能を非同期で実装
- 投稿時、ターミナルに下記のエラーが現れる
ActionController::RoutingError (No route matches [PATCH] "/articles/19/comments/72"):
````
よく見ると投稿を押した段階でPATCHが呼び出されている、、、、
→本当はPOSTがほしい
* **rails route**コマンドで確認してもPOSTはあるし、PATCHはない
* 以下CommentsController
````comments_controller.rb
class Public::CommentsController < ApplicationController
def create
@article = Article.find(params[:article_id])
@comments = @article.comments
@comment = current_user.comments.new(comment_params)
@comment_new = Comment.new
@comment.article_id = @article.id
@comment.save
end
:
:
:
def comment_params
params.require(:comment).permit(:comment_content, :article_id, :user_id, :rate)
end
end
```
###2.結論(解決策)
**saveメソッドの後に @comment = Comment.newを挿入**
以下追記版です
````comments_controller.rb
class Public::CommentsController < ApplicationController
def create
@article = Article.find(params[:article_id])
@comments = @article.comments
@comment = current_user.comments.new(comment_params)
@comment_new = Comment.new
@comment.article_id = @article.id
if @comment.save
@comment = Comment.new #追記
else
redirect_to request.referer #非同期できなかった場合、リダイレクトされる
end
end
````
###3.原因
Viewのform_withの部分で
```comment.show.html.erb
<%= form_with(model: [@article, @comment], remote: true) do |f| %>
```
@commentがすでに保存済みのためupdateを呼び出していました。
@commentは新規の投稿なんだよー
と教えて上げるために、
save後にnewメソッドを改めて定義しました。
####投稿者コメント
最初は意味がわからん!と思っていましたが、
冷静に順を追って考えて記事を探して解決に至りました。
解決のお役に立てたら嬉しいです。
####My Profile
プログラミング学習歴3ヶ月目のアカウントです!
プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。
また、プログラミング初学者の方にわかりやすく、簡潔にまとめて情報共有できればと考えています。
もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。