【Ruby on Rails】非同期コメント投稿時のRoutingError (No route matches [PATCH]....)を解消した話
対象者
- コメント投稿時に[PATCH]を呼び出すエラーに遭遇している方
目的
- ルーティングエラーを解消して、正常に稼働させる
実際の手順と実例
1.前提
- コメント機能を非同期で実装
- 投稿時、ターミナルに下記のエラーが現れる
- ルーティングエラーを解消して、正常に稼働させる
実際の手順と実例
1.前提
- コメント機能を非同期で実装
- 投稿時、ターミナルに下記のエラーが現れる
ActionController::RoutingError (No route matches [PATCH] "/articles/19/comments/72"):
よく見ると投稿を押した段階でPATCHが呼び出されている、、、、
→本当はPOSTがほしい
- rails routeコマンドで確認してもPOSTはあるし、PATCHはない
- 以下CommentsController
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を挿入
以下追記版です
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の部分で
<%= form_with(model: [@article, @comment], remote: true) do |f| %>
@commentがすでに保存済みのためupdateを呼び出していました。
@commentは新規の投稿なんだよー
と教えて上げるために、
save後にnewメソッドを改めて定義しました。
投稿者コメント
最初は意味がわからん!と思っていましたが、
冷静に順を追って考えて記事を探して解決に至りました。
解決のお役に立てたら嬉しいです。
My Profile
プログラミング学習歴3ヶ月目のアカウントです!
プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。
また、プログラミング初学者の方にわかりやすく、簡潔にまとめて情報共有できればと考えています。
もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。
Author And Source
この問題について(【Ruby on Rails】非同期コメント投稿時のRoutingError (No route matches [PATCH]....)を解消した話), 我々は、より多くの情報をここで見つけました https://qiita.com/nao0725/items/30f35ef9b80f3d786d81著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .