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 %>
参考サイト: