【후리마 어플】상품 상세 페이지의 코멘트 기능(제4.1회)~뷰편(일람 표시)~
※초학자 때문에, 실수나 인식 차이가 많이 있다고 생각합니다만 양해 바랍니다.
상품 상세 페이지에 코멘트 기능을 구현했습니다.
전부 7회로 나누어 기사를 투고하고 있습니다.
내용
url
제1회
모델, 마이그레이션 편
htps : // 이 m/쇼_우/있어 ms/03108801146에 65d58413
제2회
라우팅편
htps : // 코 m / 쇼_우 / ms / 5c829b3060 2 919
제3회
컨트롤러편
htps : // 이 m/쇼_우/있어 ms/8528f336cf0d470cd719
제4.1회
뷰 편 (목록 표시)
htps : // 코 m/쇼_우/있어 ms/6190562270c722956547
제4.2회
뷰 편 (인풋 폼)
htps : // 이 m / 쇼_우 / ms / 67c2에 4fc6c605283에 2
제5회
jquery 편
htps : // 이 m/쇼_우/있어 ms/d72b60114f76380d05f6
제6회
ajax편
htps : // 코 m / 쇼 _ 우 / ms / 카에 d9b1471 63d43d3
~ 코드 전문 ~ htps : // 코 m / 쇼_우 / ms / 310 아 c5b653bdfcb99 아 2c
뷰 정보
코멘트 기능에 있어서의 뷰란, 상품에 끈 「코멘트의 일람을 표시시키는 화면」과 「코멘트를 입력시키는 화면」입니다.
목록 표시의 기본 아이디어는
코멘트 기능에 있어서의 뷰란, 상품에 끈 「코멘트의 일람을 표시시키는 화면」과 「코멘트를 입력시키는 화면」입니다.
목록 표시의 기본 아이디어는
라는 구현이 됩니다.
items/show.html.haml
- @commentALL.each do |comment|
= comment.comment
= comment.user.nickname
#実装イメージ
단, each do로 돌릴 때 조건 분기하고 상태에 따라 표시를 바꿔야합니다
디스플레이 화면 구현 요구 사항
①자신(로그인중 유저)의 코멘트는 핑크(이름은 코멘트의 오른쪽에 표시)
예)
② 타인의 코멘트는 블루(이름은 코멘트의 왼쪽에 표시)
예)
③출품자의 화면에는, 코멘트에 「삭제 버튼」이 붙는다
예)
④ 「가삭제상태」의 코멘트에는 「출품자에 의해 이 코멘트는 삭제되었습니다.」라고 표시된다. 또한, 출품자의 화면에는, 임시 삭제 상태의 코멘트에 「복원 버튼」 「완전 삭제 버튼」이 붙는다.
예)
⑤출품자의 이름에는 「출품자」라고 표시된다
예)
이러한 요구 사항을 충족하는 조건 분기를 뷰에 제공해야 합니다.
조건 분기의 개략은 다음과 같이 했습니다.
개요
- @commentALL.each do |comment|
- if comment.user_id == current_user.id #コメントユーザーとログインユーザーが同一(自分のコメント)の場合
#ピンク色の吹き出しを表示
- if comment.delete_check == 1 # 仮削除状態の場合
# 「出品者によりこのコメントは削除されました。」と表示する。
- if comment.item.seller == current_user #ログイン中のユーザーが出品者である場合
# 「復元ボタン」「完全削除ボタン」を表示する。
- else #仮削除状態でない場合
# コメント内容、時間を表示
- if comment.item.seller == current_user #ログイン中のユーザーが出品者である場合
# 「削除ボタン」を表示
# ニックネームを表示
- else #コメントユーザーとログインユーザーが異なる(他人のコメント)の場合
# ニックネームを表示
# 青色の吹き出しを表示
- if comment.delete_check == 1 # 仮削除状態の場合
# 「出品者によりこのコメントは削除されました。」と表示する。
- if comment.item.seller == current_user #ログイン中のユーザーが出品者である場合
# 「復元ボタン」「完全削除ボタン」を表示する。
- else #仮削除状態でない場合
# コメント内容、時間を表示
- if comment.item.seller == current_user #ログイン中のユーザーが出品者である場合
# 「削除ボタン」を表示
이미지로서는, 위로부터 comment를 흘려 가 if로 체에 걸쳐, 합치한 것은 표시한다고 하는 느낌입니다.
포인트로서는
포인트
・delete_checkカラムに格納している値が、 "0" か "1" で仮削除状態かを判別して、表示内容を変える。
・自分のコメントは、ピンクの吹き出しを表示し、後ろにニックネームを表示する。
・他人のコメントは、ニックネームを前に表示し、後ろに青い吹き出しを表示する。
같은 곳입니다. 또, 위 블록(자신의 코멘트의 경우)과 아래의 블록(타인의 코멘트의 경우)에는 공통된 부분이 있으므로, 부분 템플릿으로 정리합니다.
결과 다음과 같이 되었습니다.
items/show.html.haml
.commentBox
.comment_list
- if user_signed_in?
- @commentALL.each do |comment|
- if comment.user_id == current_user.id
# ===================================
# コメントユーザーとログインユーザーが同一の場合
# ===================================
.comment_Me.comment_one_block{data:{index: comment.id}}
- if comment.delete_check == 1 # 削除済の場合
.comment_content
出品者によりこのコメントは削除されました。
= render 'items/template_comment/comment_delete_restore_btn',comment: comment
- else # 削除されていない場合
.comment_content
= comment.comment
.comment_create_at
= comment.created_at.strftime("%Y年%m月%d日 %H時%M分")
- if comment.item.seller == current_user
.comment_delete.me_pre_delete{data:{index: comment.id}}
= link_to '削除する', comment_path(comment.id) ,method: :patch
= render 'items/template_comment/comment_name',comment: comment
- else
# ===================================
# コメントユーザーとログインユーザーが異なる場合の場合
# ===================================
.comment_Other.comment_one_block{data:{index: comment.id}}
= render 'items/template_comment/comment_name',comment: comment
- if comment.delete_check == 1 # 削除済の場合
.comment_content_other
出品者によりこのコメントは削除されました。
= render 'items/template_comment/comment_delete_restore_btn',comment: comment
- else # 削除されていない場合
.comment_content_other
= comment.comment
.comment_create_at
= comment.created_at.strftime("%Y年%m月%d日 %H時%M分")
- if comment.item.seller == current_user # 出品者とログインユーザーが等しい場合
.comment_delete.other_pre_delete{data:{index: comment.id}}
= link_to '削除する', comment_path(comment.id) ,method: :patch
items/items/template_comment/_comment_delete_restore_btn.html.haml
- if comment.item.seller == current_user # 出品者とログインユーザーが等しい場合
.comment_restore{data:{index: comment.id}}
= link_to "復元する",restore_comment_path(comment.id)
.comment_delete.complete_delete{data:{index: comment.id}}
= link_to '完全に削除する', comment_path(comment.id) ,method: :delete
items/items/template_comment/_comment_name.html.haml
.comment_user_name
= comment.user.nickname
- if comment.user == comment.item.seller # コメントユーザーと出品者が同じ場合
.seller_display
出品者
보충
1.同じ形でも異なるクラス名をつけているのは(me_pre_deleteとother_pre_deleteなど)、jqueryの実装のためです。(第5回 〜jquery〜 参照)
2. {data:{index: comment.id}}の記述はjqueryの実装のための記述です。(第5回 〜jquery編〜 参照)
다음 번(제4.2회)은 뷰(인풋 폼)편이 됩니다.
Reference
이 문제에 관하여(【후리마 어플】상품 상세 페이지의 코멘트 기능(제4.1회)~뷰편(일람 표시)~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sho_U/items/6190562270c722956547텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)