2012-06-26 70 views
0

我有一個架構問題來解決與導軌應用程序。我有人像可以投票(上或下)每天的圖像庫。這些圖像按照他們的分數和created_at時間戳進行排序,因此我們獲得了48張圖像的頂部圖像畫廊(即使當天上傳的圖像超過48張)。需要幫助瞭解此查詢(導軌)

隨着頂部的一天,你可以看到昨天和前兩天的頂部圖像...我想添加功能,讓人看到畫廊的前一個圖像,每當他選擇一個圖像...換句話說你可以選擇圖像5/48,並可以通過點擊一個箭頭去4/48圖像(前一個)...

以同樣的方式,昨天的第一個頂部圖像的前一個圖像應該導致你到今天的最後一個頂部圖像...

它可能很簡單,但我找不到合適的查詢來完成這項工作...有什麼建議嗎?

謝謝

+0

你能分享你的數據庫模式嗎?你有單獨的頂部圖像表嗎?它有什麼專欄?你在圖像表中保留了一張上/下選票的總數嗎?我想你想要的東西像'''ORDER BY created_at DESC,得分DESC''' – Teoulas

+0

不,我沒有單獨的頂部圖像表(即使我認爲這可能是一個好主意,做一些單獨的頂部OLAP圖像表)。該模式是非常基本的:我保留在評分列中的上/下投票的總和,迄今爲止,我已經使用ORDER BY created_at DESC,得分DESC – user318722

+0

我犯了一個錯誤,它是'ORDER BY created_at ASC,得分DESC'您希望上一個鏈接在達到最高得分圖像之後回到前一天。 – Teoulas

回答

0

你在談論麪包屑。我沒有用Ruby的工作,但這裏有一個不同的問題,誰的答案可能是你在找什麼

Breadcrumbs in Ruby on Rails

+0

不,我不是在談麪包屑,麪包屑是保持鏈接訪問的歷史,這不是我想要的。想象一下,你打開一個頁面,直接看看這個頁面上的第四張圖片,然後你想看看第三張圖片(之前的圖片) – user318722

0

好吧,如果你已經有你的查詢,讓你按照正確的順序的圖像,並知道當前的圖像,很容易找到下一個/上一個。假設@id是您目前的圖片ID,你可以做這樣的事情:

top_images = Image.order("created_at ASC, score DESC") 
prev = top_images.where("id < ?", @id).limit(1) 
next = top_images.where("id > ?", @id).limit(1) 

如果你想要一個「上一頁」鏈接到回去的時候達到最高等級的圖像爲這一天後,它更有意義ORDER BY created_at ASC, score DESC