Rails【초보자용】코멘트 기능의 실장

rails에서 코멘트 기능의 구현에 대해 정리했습니다.

전제



Ruby on Rails의 개발 환경이 갖추어져 있습니다.
Posts(투고 테이블)와 User(사용자 테이블)는 이미 작성되어 있다.
User 테이블은 gem devise를 사용하고 있다.
이번에는 게시물에 대한 댓글을 구현합니다.

주석 기능 구현



1.Comment 모델 만들기



작성할 Comments 테이블의 세부사항과 관계에 대해 다음과 같습니다.


터미널에서 모델링


$ rails g model comment

마이그레이션 파일 작성



20********_create_comments.rb
class CreateComments < ActiveRecord::Migration[6.0]
  def change
    create_table :comments do |t |
      #ここから記述
      t.references :user,foreign_key: true
      t.references :post, foreign_key: true
      t.text :text,nul: false
      #ここまで記述
      t.timestamps
    end
  end
end

마이그레이션 파일 적응


$ rails db:migrate

Comment 모델과 User 모델, Post 모델을 연결하기



app/models/comment.rb
class Comment < ApplicationRecord
  belongs_to :user
  belongs_to :post
end

app/models/user.rb
class User < ApplicationRecord
  has_many :posts
  has_many :comments
end

app/models/post.rb
class Comment < ApplicationRecord
  has_many :users
  has_many :comments
end

2. 라우팅 만들기



routes.rb
Rails.application.routes.draw do
  resources :users
  resources :posts do
    resource :comments
  end
end

3.Comments 컨트롤러 작성



comments_controller.rb
class CommentsController < ApplicationController
  def create
    @comment = Comment.create(comment_params)
    redirect_back(fallback_location: root_path)
  end

 private

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

posts_controller.rb
class PostsController < ApplicationController
  def new
    @post = Post.new
  end

  def create
    @post = Post.new(post_params)
    if @post.save
      redirect_to user_url(current_user)
    else
      render :new
    end
  end

  def show
    #Commentインスタンスの生成を書く
    #今回はPosts#showにてコメント機能を実装したいと思います。
    @comment = Comment.new
    @comments = @post.comment_cs.includes(:user)
  end

private

  def post_params
    params.require(:post).permit(:text).merge(user_id: current_user.id)
  end

  def set_post
    @post = Post.find(params[:id])
  end

end

4. 뷰 작성



글 상세 페이지에 코멘트 기능의 기술을 쓴다.



views/posts/show.html.erb

#省略

 <%= form_with model: [@post,@comment],merhod: :post,locals: true do | form | %>
    <%= form.text_area :text %>
    <%= form.submit "投稿する" %>
 <% end %>

#省略

코멘트 기능 완성!

요약



이번은 Rails로 코멘트 기능을 테이블 작성으로부터 실시해 왔습니다.
자신도 프로그래밍 초보자이므로 뭔가 실수가 있으면 알려주세요.
끝까지 읽어 주셔서 감사합니다!

좋은 웹페이지 즐겨찾기