2016-05-03 67 views
0

目前我有下面的標準順序拉回我的記錄範圍:在一個不尋常的偏移順序返回記錄

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 

,並轉換到該停航了作爲這樣一個HTML塊:

1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 

我想要的悠閒了,像這樣一個HTML塊:

1 6 11 16 
2 7 12 
3 8 13 
4 9 14 
5 10 15 

所以我覺得我需要拉記錄早在日e下面的順序 - (記錄偏移的行數)

1 6 11 16 2 7 12 3 8 13 4 9 14 5 10 15 

任何想法什麼是在Rails/ActiveRecord中做到這一點的最新方法?

+0

客戶直接從數據庫訂購是可能的,但非常笨重,我不會推薦它。如果可能的話,我會在視圖中實現順序,或者控制器。我對前端沒有太大的興趣,但我敢打賭,你可以使用一些css/javascript包來以很少的努力在列中顯示項目。如果不這樣做,可以使用任何Ruby想象的方式在控制器中寫入順序,例如,使用Array上的'transpose'方法。這將比嘗試以特定的自定義順序從db中獲取記錄的方式更具可讀性和可維護性。 –

回答

1

您必須知道最終要渲染多少列。我認爲這一定適合你:

columns = 5 
MyModel.order(:id).in_groups_of(columns).transpose 

然後你得到一個行數組,每一行都有一組記錄。

如果你想要一個獨特的數組,你最後可以添加.flatten

+0

好東西。這是要走的路。你實際上需要知道列不是行:'.in_groups(columns).transpose.flatten.reject(&:blank?)' –

+0

是的,你是對的。 –

0

不能這樣做與AR排序!您必須在控制器或視圖中執行此操作。

+0

呵呵,你想分享的任何例子? –

+0

這是讓你開始:'num = 5; array.each_slice(num).with_index {|(* cols),i |列[i] = cols}; columns.length.times {| i | ''。 – Uzbekjon

相關問題