2011-07-02 3 views
1

(실제 숫자는 더 큰 100 배, 그러나 그 다음과 같이 설명하기 쉽게) 우리는 100의 기록 세트가레일 3 + 활성 기록 : 영리한 방법을 "라운드 로빈"기록의 순서가

을 5 개 레스토랑에 대한 리뷰. 일부 레스토랑은 3 또는 4 리뷰를 가지고, 일부는 20-30 리뷰를했습니다.

@reviews = Review.joins(:store). 
where('reviews.published= ?',true). 
order("reviews.created_at DESC") 

내 보고서보기 중 하나를 들어, 나는 각 레스토랑을 보장 라운드 로빈 순서로 리뷰를 표시 할 필요가 동일한 범위를 가져옵니다

현재 내가 가장 오래된에 최신에서 그들을 주선 간단한 보고서를 목록 상단에

most recent for restaurant #A 
most recent for restaurant #B 
... 
most recent for restaurant #E 

는, #A, #B을위한 다음 - 가장 최근에 대한 반복 ... #E

가 이상적으로 라운드 로빈의 순서는 레스토랑이있는 것 가장 총 리뷰.

코드에서 느린 방식으로 수행하는 것이 어렵지는 않지만 더 빠르고 능동적 인 접근 방법이 있는지 궁금합니다.

===

레스토랑에 의해 (a) 분류, (b), 각 레스토랑의 각 항목에 대해 1 내지 N 카운트 임시 "카운터"열 생성 (C)에 재 방법 있는가 그 카운터 열에 정렬? 그렇게 할 것입니다.

예를 들어, 이후에 (a) 및 (b) 상기 레코드

A , <some review>, 1 
A , <some review>, 2 
... 
A , <some review>, 23 

B , <some review>, 1 
B , <some review>, 2 
... 
B , <some review>, 11 

C , <some review>, 1 
C , <some review>, 2 
... 
C , <some review>, 9 

될 경우 I 수 후 정렬은 것 카운터 레코드 집합이 라운드 로빈 등의 B, C,

답변

0

DB last_displayed에 열을 추가하고 레스토랑의 각 디스플레이에서이를 업데이트하고 항상 .order('last_displayed')을 정렬 할 수 있습니다.

은 또한 당신이 그것을 표시 한 후 updated_at 열, touch 기록을 사용할 수 있다고 생각하고, 해당 열을 기준으로 정렬 - 여전히 기대하고 영리한가 비록 당신이 당신의 DB 구조를

+0

재미있는 아이디어를 업데이트하지 않아도됩니다 이런 식으로 방법은 대략 질문에 설명 된대로 SQL 카운터를 구현합니다. 실제 트릭은 will_paginate를 사용하여 보고서를 페이지에 게시하고 쿼리를 다시 호출하는 링크를 클릭 할 때마다 많은 스키마가 손상된다는 것입니다. – jpwynn