2011-07-02 20 views
1

(實際數字是100倍大,但它更容易解釋如下)軌3 +活動記錄:是有一個聰明的辦法來「循環」的記錄的順序

我們有一個記錄集的100評論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

理想情況下,循環的順序將是該餐廳最全面的評論。

在代碼中執行速度並不難,但我想知道是否有更快/更好的主動記錄方法?

===

有沒有一種辦法(一)排序餐廳,(二)建立一個臨時的「計數器」欄,從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 

如果我可以然後那種櫃檯上記錄集,它會循環A,B,C等

回答

0

您可以在DB last_displayed中添加一列,用餐廳的每個顯示屏更新並始終排序.order('last_displayed')

我也認爲你能顯示它後使用updated_at列,touch備案,並排序的列 - 這樣你就不會需要更新您的數據庫結構

+0

有趣的想法,但仍然希望有一個聰明的按照問題中粗略描述的方式來實現sql計數器。真正的訣竅是我們使用will_paginate來分頁,並且每次點擊一個鏈接來重新調用查詢,這就打破了許多方案。 – jpwynn