#【ゴール】
コメント機能の実装
→ コメントの表示
→ コメント件数の表示
参考:https://qiita.com/__kotaro_/items/8a6bda99dab61d2a72a5
#【メリット】
■ アプリケーションの完成度が増す
■ UX向上
#【開発環境】
■ Mac OS catalina
■ Ruby on Rails (5.2.4.2)
■ Virtual Box:6.1
■ Vagrant: 2.2.7
#【実装】
まず、アプリケーション作成
1.commentモデル作成
※DBに記録するので必須
mac.terminal
$ rails g model Comment
2.modelへアソシエーション 追記
※ user : comment = 1 : X (1対多)
※ post : comment = 1 : X (1対多)
models/post.rb
has_many :comments ,dependent: :destroy
models/user.rb
has_many :comments , dependent: :destroy
modles/comment.rb
belongs_to :user
belongs_to :post , optional: true
2.comments controller 作成
※ 今回は作成のみ、createアクションも同時に作成 ①
※ "build"メソッドで紐付いたものも難なく作成 ②
※ "user"を認識させてあげる ③
mac.terminal
$ rails g controller Commnets create #①
posts_controller.rb
class CommentsController < ApplicationController
before_action :authenticate_user!
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(comment_params) #②
@comment.user_id = current_user.id #③
if @comment.save
flash[:success] = "コメントを投稿しました"
redirect_back(fallback_location: root_path)
else
flash[:unsuccess] = "コメントを投稿できませんでした"
redirect_back(fallback_location: root_path)
end
end
private
def comment_params
params.require(:comment).permit(:text)
end
※今回は"post/show"で記述しているので、追加で記述要
posts_controller.rb
def show
@post =Post.find(params[:id])
@comment = Comment.new
@comments = @post.comments.all
3.view 記述
※"form_for"の際には"@post","@comment"両方に情報を!!
views/posts/show.html.erb
<%= form_for [@post , @comment] do |f| %> #コメント送信フォーム
<%= f.text_area :text %>
<%= f.submit "Comment"%>
<% end %>
(中略)
<% @comments.each do |c| %> #コメント表示
<%= c.text %>
<%= c.user.name %>
<%= c.created_at %>
<% end %>
以上