[초보자용] 추가 주석 기능 제작

8282 단어 Rails

전제 조건


• 기고문 일람페이지 제작상태
· 기고문 일람페이지에 주석 기능 추가
· 댓글은 User와 관련이 없는 규격을 채택했다
(설명이 너무 적어서 죄송합니다. 용서해 주세요.)

주석 기능 작성


주석 모델 생성하기


작성할 열
user_id
content
topic_id
준비
$ rails g model comment user_id:integer content:text topic_id:integer
rails db:migrate

연관 추가(모델 연관)


평론과 투고의 관계는 다음과 같다.
・Comment 에는 Topic 이 있습니다.
・Comment 에는 User 가 있습니다.
· Topic에는 여러 개의 공공 단말기가 있다
이런 연관이 있다.
따라서 Comment 모델에 "belongs to"를 추가하고 Topic 모델에 "has many"를 추가하면 다음과 같습니다.
app/models/comment.rb
class Comment < ApplicationRecord
  belongs_to :topic
  belongs_to :user

  validates :content, presence: true
end
models/topic.rb
  has_many :comments, dependent: :destroy
  has_many :comment_users, through: :comments, source: 'user'

컨트롤러 생성 및 라우팅 설정

$rails g controller comments
config/routes.rb
  get 'comment/new'
  #中略

resources :topics do
  resources :comments
  #/topics/:topic_id/comment/newのパスが使用できる
end
controllers/comments_controller.rb
class CommentsController < ApplicationController
  def new
    @comment = Comment.new
    @topic_id = params[:topic_id]
  end

  def create #コメントを登録する
    @comment = Comment.new #コメントのインスタンスを作成
    @comment.topic_id = params[:topic_id] #記事番号をパラメータから受け取る
    @comment.content = params[:content] #コメントの内容をパラメータから受け取る

    if @comment.save #コメント登録の条件分岐
      redirect_to topics_path, success: 'コメントに成功しました' 
    else
      flash.now[:danger] = "コメントに失敗しました"
      render :new
    end
  end
end

링크 추가


이번에는 투고 일람페이지의 투고에서 평론페이지로 옮길 수 있다.주석 준비 아이콘 링크 붙여넣기
topics/index.html.erb
<%= link_to new_topic_comment_path(topic_id: topic.id), method: :get do %>
 <%= image_tag 'icons/comment.png', class: 'topic-index-icon' %>
<% end %>

주석 발언 페이지 만들기


views/comments/new.html.erb
<div class="topic-new-wrapper" >
  <div class="container">
    <div class="row">
      <div class="col-md-6 col-md-offset-3">
        <h1 class="text-center">Add Comment</h1>
        <%= form_with url: '/topics/' + @topic_id.to_s + '/comments' ,local: true do |f| %>
          <div class="form-group">
            <%= f.label :content %>
            <%= f.text_area :content, class: 'form-control' %>
          </div>

          <% if logged_in? %>
            <%= f.submit 'コメント送信', class: 'btn btn-black btn-block' %>
          <% end %>
        <% end %>
      </div>
    </div>
  </div>
</div>

결과 작성


주석 추가 페이지

기사 투고 일람페이지

이 졸렬한 보도에 대해 죄송하지만 참고가 되었으면 합니다.
잘못과 인식 오류 등이 있으면 지적해 주십시오.

좋은 웹페이지 즐겨찾기