見出し画像

Rails-コメント機能の設置

投稿に対してコメントをできるようにしよう!


例: イメージ

投稿機能を設置済の方向けの内容となります。

ターミナル

$ rails g model comment

app / db / migrate / create_comments.rb

t.integer :user_id
t.integer :tweet_id
t.text :text

ターミナル

$ rails db:migrate

app / models / comment.rb

belongs_to :tweet
belongs_to :user

app / models / tweet.rb

has_many :comments, dependent: :destroy

app / models / user.rb

has_many :tweets, dependent: :destroy
has_many :comments, dependent: :destroy

app / config / routes.rb

resources :tweets do
  resources :comments, only: [:create, :destroy] 
end

ターミナル

$ rails g controller comments

app / controllers / comments_controller.rb

def create(comment_params)
  comment = Comment.create(comment_params)
  redirect_to "/tweets/#{comment.tweet.id}"
end

private
def comment_params
  params.require(:comment).permit(:text).merge(user_id: current_user.id, tweet_id: params[:tweet_id])
end

app / views / tweets / show.html.erb

<div>
  <% if user_signed_in? %>
    <%= form_with(model: [@tweet, @comment], local: true) do |form| %>
    <%= form.text_area :text, placeholder: "コメントする", rows: "2" %>
    <%= form.submit "SEND" %>
  <% end %>
  <% else %>
    <strong><p>※※※ コメントの投稿には新規登録/ログインが必要です ※※※</p></strong>
  <% end %>
</div>

app / controllers / tweets_controller.rb

def show
 @comment = Comment.new
 @comments = @tweet.comments.includes(:user)
end

app / views / tweets / show.html.erb

<% @comments.each do |comment| %>

<%= link_to comment.user.nickname, "/users/#{comment.user_id}" %>
<%= comment.text %>

<% end %>

参考サイト: