【Rails】 좋아하는 순서 · 투고 수순 등 ◯ ◯ 순서의 생각 · 방법

5671 단어 랭킹루비Rails

소개



랭킹 순서로 표시 할 때의 사고 방식에 대해 집착 해 버렸으므로,
생각을 남겨 둡니다.

전제



투고, 좋아요, 태그 각각의 기능은 작성이 끝난 것으로 합니다.

방법



게시물에 묶는 것이 좋습니다.



우선, posts 테이블과 likes 테이블에는 다음과 같은 데이터가 들어 있다고 가정합니다.



우선 하는 것은, 2개의 테이블을 합체시킵니다.



likes 테이블의 post_id와 posts 테이블의 id는 동일해야 합니다.

"포스트에 묶는 좋네요, 많은 순서로 늘어놓는다"



"likes 테이블의 post_id 수를 집계하고 많은 순서로 정렬"

라고 말하게 됩니다.

likes 테이블에는 원래 좋은 것을 받은 post의 id가 존재합니다.
likes의 id는 좋아할 때마다 늘어납니다.
post_id는 likes 테이블에서 중복되는 것으로, 하나의 게시물에 주목하면,
그 게시물이 좋아질 때마다 likes 테이블의 특정 post_id는 증가합니다.
그래서, likes 테이블에 존재하는 post_id를 세면, 어느 post가 얼마나 좋은 것을 받고 있는지를 알고, 비교할 수 있는 것입니다.

상기 기사를 참고로,
 @posts = Post.find(Like.group(:post_id).order('count(post_id) desc').limit(3).pluck(:post_id))

라고 쓸 수 있습니다.
#likeモデルのpost_idカラムを指定してまとめる
Post.find(Like.group(:post_id)
#post_idの多い順に並べる
.order('count(post_id) desc')
#並び替えたものの上位3つのpost_idを抽出する
.limit(3).pluck(:post_id))

태그에 묶는 게시 순서



이쪽도, 좋아하는 것과 같은 생각으로 갈 수 있습니다.

첫째, post와 tag를 연결하는 post_tag 모델이 존재한다.
이번에 하고 싶은 것은 post에 묶는 태그 중에서 더 많은 post를 보유한 태그를 차례로 늘어놓고 싶습니다.
간단히 말하면, 자주 사용되는 태그를 차례로 늘어놓고 싶습니다.

post_tag 테이블과 tag 테이블은 다음과 같습니다.



이것을 합체합니다.



이번에는 post_tag 테이블의 id와 tags 테이블의 tag_id가 일치해야합니다.
태그에 붙어있는 게시물의 수를 비교하고 싶으므로,
이번에는 post_tags 테이블의 tag_id 수를 집계하여 많은 순서로 나열하면 됩니다.

post 및 tag 세트의 정보가 post_tags 테이블에 저장되므로,
post_tags 테이블의 tag_id에서 자주 발생하는 태그는 더 많은 게시물에 연결되어 있다고 말하는 것입니다.

사실,
@tags = Tag.find(PostTag.group(:tag_id).order('count(tag_id) desc').limit(10).pluck(:tag_id))

라고 쓸 수 있습니다.
#Postモデルのtag_idカラムを指定してまとめる
Tag.find(PostTag.group(:tag_id)
#tag_idを数え数の多い順に並び替える
.order('count(tag_id) desc')
#並び替えたものの上位10個のtag_idを抽出する
.limit(10).pluck(:tag_id))

좋아요 태그도 마침내 여러 ID를 플러그로 꺼내고 있기 때문에,
@posts , @tags 등의 인스턴스 변수에 저장하고 뷰에서 each 문을 사용하여 데이터를 나열하면 OK입니다.

group 메소드에 대해서도 확인해야 했습니다.

확실히 이해할 수 있으면 여러가지 쉽게 응용할 수 있습니다.

좋은 웹페이지 즐겨찾기