【Rails】게시판 코멘트 기능 실장(메모)
목표
댓글 기능 구현
환경
전제
구현
1. 모델 만들기
터미널$ rails g model Comment comment:string post:references
생성된 마이그레이션 파일.
지금 생각하면 모델명도 코멘트명도 comment에서 혼란스러워 버린 생각이 듭니다. .
class CreateComments < ActiveRecord::Migration[6.1]
def change
create_table :comments do |t|
t.string :comment
t.references :post, null: false, foreign_key: true
t.timestamps
end
end
end
마이그레이션 실행.
터미널$ rails db:migrate
2. 모델 연관
app/models/post.rbclass Post < ApplicationRecord
has_many :comments, dependent: :destroy
게시물에는 여러 개의 코멘트가 있으므로 has_many :comments
post 투고를 삭제했을 때 추종해, 코멘트도 사라지기를 바라므로 dependent: :destroy
를 추기.
app/models/comment.rbclass Comment < ApplicationRecord
belongs_to :post
1개의 코멘트는 1건의 투고에 속하고 있네요.
이 연관 부분은 매우 중요합니다.
3. 라우팅 추가
config/routes.rbRails.application.routes.draw do
resources :posts do
resources :comments
end
end
중첩된 라우팅을 설명.rails routes
에서 확인하면 post_commnts POST
가 /posts/:post_id/commnts(.:format)
입니다.
4. 컨트롤러 작성
터미널$ rails g controller Comments
생성 app/controller/comments.rb
에 create
액션 설명.
app/controller/comments.rbclass CommentsController < ApplicationController
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(comment_params)
if @comment.save
flash[:success] = 'コメントを投稿しました'
redirect_to post_path(@post)
else
flash[:danger] = 'コメント投稿に失敗しました'
redirect_back(fallback_location: posts_path)
end
end
end
private
def comment_params
params.require(:comment).permit(:comment)
end
5. 뷰에 설명
게시물 상세 페이지에 댓글 게시 양식과 댓글 목록을 만듭니다.
app/views/posts/show.html.erb<%= form_with(model:[ @post, @post.comments.build ], local:true) do |form| %>
<div class="form-group">
<p>
<%= form.label 'コメント(255文字未満)' %>
<%= form.text_area :comment,class: 'form-control' %>
</p>
</div>
<div class="form_action row">
<%= form.submit 'コメント投稿',class: 'btn btn-primary' %>
</div>
<% end %>
코멘트한 유저의 이름과 작성 시간, 코멘트 내용의 기술.
app/views/posts/show.html.erb
<% @post.comments.each do |comment| %>
<P><%= comment.user.name %> : <%= comment.created.at %></p>
<p><%= commet.comment %></p>
<% end %>
거꾸로는하고 있습니다만, 이것으로 투고에 대한 코멘트 기능을 사용할 수 있을 것입니다.
참고
참고로 한 기사입니다.
htps : // 코 m / 삼각형 / ms / 2034764897 c6 91 에 f982
htps : // 이 m/__코타로_/있어 ms/8아 6b다 99다 b61d2아 72아 5
Reference
이 문제에 관하여(【Rails】게시판 코멘트 기능 실장(메모)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moru0606/items/55be37d67d0e6330a513
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ rails g model Comment comment:string post:references
class CreateComments < ActiveRecord::Migration[6.1]
def change
create_table :comments do |t|
t.string :comment
t.references :post, null: false, foreign_key: true
t.timestamps
end
end
end
$ rails db:migrate
class Post < ApplicationRecord
has_many :comments, dependent: :destroy
class Comment < ApplicationRecord
belongs_to :post
Rails.application.routes.draw do
resources :posts do
resources :comments
end
end
$ rails g controller Comments
class CommentsController < ApplicationController
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(comment_params)
if @comment.save
flash[:success] = 'コメントを投稿しました'
redirect_to post_path(@post)
else
flash[:danger] = 'コメント投稿に失敗しました'
redirect_back(fallback_location: posts_path)
end
end
end
private
def comment_params
params.require(:comment).permit(:comment)
end
게시물 상세 페이지에 댓글 게시 양식과 댓글 목록을 만듭니다.
app/views/posts/show.html.erb
<%= form_with(model:[ @post, @post.comments.build ], local:true) do |form| %>
<div class="form-group">
<p>
<%= form.label 'コメント(255文字未満)' %>
<%= form.text_area :comment,class: 'form-control' %>
</p>
</div>
<div class="form_action row">
<%= form.submit 'コメント投稿',class: 'btn btn-primary' %>
</div>
<% end %>
코멘트한 유저의 이름과 작성 시간, 코멘트 내용의 기술.
app/views/posts/show.html.erb
<% @post.comments.each do |comment| %>
<P><%= comment.user.name %> : <%= comment.created.at %></p>
<p><%= commet.comment %></p>
<% end %>
거꾸로는하고 있습니다만, 이것으로 투고에 대한 코멘트 기능을 사용할 수 있을 것입니다.
참고
참고로 한 기사입니다.
htps : // 코 m / 삼각형 / ms / 2034764897 c6 91 에 f982
htps : // 이 m/__코타로_/있어 ms/8아 6b다 99다 b61d2아 72아 5
Reference
이 문제에 관하여(【Rails】게시판 코멘트 기능 실장(메모)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moru0606/items/55be37d67d0e6330a513
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Rails】게시판 코멘트 기능 실장(메모)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moru0606/items/55be37d67d0e6330a513텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)