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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

解決済

Ruby on Rails でコメント機能を実装したい

Hellow
Hellow

総合スコア11

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

1回答

0評価

0クリップ

234閲覧

投稿2021/12/10 00:49

編集2021/12/10 00:52

前提・実現したいこと

環境: ruby '2.6.6' rails '6.1.4'

Ruby on Rails で投稿に紐づくコメント機能を実装し、
投稿詳細画面で表示できるようにしたい。

コメント投稿ファームにコメントを入力しているのですが、
コメントが作成されない状況です。

エラーも特に出ていないのですが、Commentを投稿できません。

試したこと

コメント機能の部分は下記リンクに沿って実装を進めています。
rails c でComment.allを使ってコメントが作成されているか、確認したのですが、
コメント自体作成されていない状況です。

https://qiita.com/kurawo___D/items/d2fefdd329f5310113aa

該当のソースコード

ruby

# routes.rb Rails.application.routes.draw do devise_for :users root 'pages#index' resources :users, only: [:show] resources :microposts do #postsコントローラへのルーティング resources :comments, only: [:create] #commentsコントローラへのルーティング end # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html end

ruby

# microposts_controller.rb class MicropostsController < ApplicationController before_action :logged_in_user, only: [:new, :create, :destroy] def create @micropost = current_user.microposts.build(micropost_params) if @micropost.save flash[:success] = '投稿されました' redirect_to root_url end end def destroy end def show @micropost = Micropost.find_by(id:params[:id]) @comments = @micropost.comments @comment = current_user.comments.new end def new @micropost = current_user.microposts.build end def micropost_params params.require(:micropost).permit(:content) end end

ruby

# comments_controller.rb class CommentsController < ApplicationController def create @comment = current_user.comments.new(comment_params) if @comment.save flash[:succes] = '投稿されました' redirect_back(fallback_location: root_path) else redirect_back(fallback_location: root_path) end end private def comment_params params.require(:comment).permit(:comment_content) end end

ruby

# micropost.rb class Micropost < ApplicationRecord belongs_to :user has_many :comments, dependent: :destroy default_scope -> { order(created_at: :desc) } validates :user_id, presence: true validates :content, presence: true, length: { maximum: 140 } end

ruby

# comment.rb class Comment < ApplicationRecord belongs_to :user belongs_to :micropost default_scope -> { order(created_at: :desc) } validates :user_id, presence: true validates :comment_content, presence: true, length: { maximum: 140 } end

ruby

# /microposts/show.html.erb <h3>投稿詳細画面</h3> <%= @micropost.content %> <%# コメント投稿フォーム %> <%= render "/comments/comment_form" %> <% if @comments.any? %> <%# コメントを追加 %> <%= @comments.comment_content %> <%= %> <% end %>

ruby

# /comments/_comment_form.html.erb <%= form_with(model: [@micropost, @comment], method: :post) do |f| %> <div> <p><%= f.label :comment_content %><br> <%= f.text_area :comment_content, placeholder: "コメント" %> <%= f.hidden_field :micropost_id, value: @micropost.id %> </div> <%= f.submit "Comment" %> <% end %>

よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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