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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Ruby on Rails 6

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

解決済

コメント機能でUrlGenerationError

yuya555555
yuya555555

総合スコア56

Ruby on Rails 6

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

2回答

0リアクション

0クリップ

196閲覧

投稿2022/07/15 09:18

開発環境

rails 6.1.6
cloud9

やりたいこと

コメント機能の実装

現状

投稿一覧から投稿詳細ページに遷移しようとすると以下のエラーが出ます。イメージ説明

エラー周りのコード

post/show

<div class="comment-form"> <%= form_with model: [@post, @comment], url: user_post_comments_path, local: true, method: :post do |f| %> <%= f.text_area :comment_content, placeholder: "コメント記入欄" %><br/> <%= f.submit "コメント" %> <% end %> </div>

post/controller

class PostsController < ApplicationController def new @post = Post.new @categories = Category.all end def create @post = Post.new(post_params) @post.user_id = current_user.id if @post.save end redirect_to user_posts_path end def edit @post = Post.find(params[:id]) @categories = Category.all end def index @posts = Post.all end def show @post = Post.find(params[:id]) @user = @post.user @comment = Comment.new end def destroy @post = Post.find(params[:id]) @post.destroy redirect_to user_posts_path end def update @post = Post.find(params[:id]) end def search @posts = Post.joins(:post_categories).where('post_categories.category_id = ?', params[:name]) render :index end private def post_params params.require(:post).permit(:place_name, :body, :latitude, :longitude, :image, :name, category_ids: []) end end

comments/controller

class CommentsController < ApplicationController def create @post = Post.find(params[:id]) comment = current_user.comments.new(comment_params) comment.post_id = post.id comment.save redirect_to post_path(post) end def destroy end private def comment_params params.require(:comment).permit(:comment_contents) end end

routes.rb

resources :users, except: [:new, :destroy] do resources :posts do resources :comments, only: [:create, :destroy] end end

詳細について

中間テーブルとしてcommentsテーブルがあります。
ネストさせているため、form_withでモデルを複数指定しており、URL指定していなければNoMethodError in Posts#show undefined method `post_comments_path' forと別のエラーが起きます。

原因が分かる方いらっしゃいましたら、ご教授いただければ幸いです。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 6

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