2013-07-07 113 views
0

我在嘗試對從數據庫中接收到的一些項目進行排序。目前,我有一系列從我的Tool模型返回的對象。現在,我檢索了一些工具從我的數據庫,通過使用下面的代碼(在我toolkit_controller):對對象進行排序Rails

def index 
@tools = Tool.order('name ASC').all 
end 

這似乎是工作的罰款,並如預期。當我這樣做時,我會得到以下結果集(爲了清晰起見,省略了一些額外的結果)。

[#<Tool id: 1, name: "Hammer", description: "A basic hammer", 
created_at: "2013-07-07 16:46:13", 
updated_at: "2013-07-07 16:46:15">, 
#<Tool id: 2, name: "Mallet", description: "A fancy 
mallet", created_at: "2013-07-07 16:46:13", updated_at: "2013-07-07 16:46:15">, 
#<Tool id: 3, name: "Screwdriver", description: "A screwdriver", 
created_at: "2013-07-07 16:46:13", updated_at: 
"2013-07-07 16:46:15">, 
#<Tool id: 4, name: "Torch", description: "A cheap torch", created_at: 
"2013-07-07 16:46:13", updated_at: "2013-07-07 16:46:15">, ....] 

我正在掙扎現在的問題是如何以垂直方式(而非水平)我ERB頁面上顯示我的工具。爲了幫助描繪出我想要的排序順序的清晰圖片,請看看這篇文章:Ruby on Rails change array display order

我的顯示代碼如下:

<%= @count = 0 %> 

<div> 
    <% @tools.each do |t| %> 
     <% @count = @count+1 %> 

      <div class="individualTool"> 
       <%= t.name %> <%= @count %> 
      </div> 

     <% if @count == 4 %> 

      <% @count = 0 %> 
     </div> 

     <div class="row-fluid"> 

     <% end %> 

    <% end %> 

正如你所看到的,上面的代碼工作正常,從顯示的名字的工具左到右(如錘,錘,螺絲刀,手電筒) ,但我的目標是按照如下所示的順序從上到下顯示它們:Ruby on Rails change array display order

在我鏈接的文章中,有人建議使用.each_slice(3).to_a.transpose.flatten(嘗試更正排序順序),但是當我在@tools上嘗試了返回的內容時,我收到一條錯誤消息,指出element size differs

任何想法,我如何能夠完成這將是偉大的!

在此先感謝。

+2

我不確定我完全理解這個問題,但是這不是一個比程序化的CSS更重要的問題嗎?如果它只是一個如何顯示的問題。 – Saifis

+0

我想嘗試以編程方式修復我的'工具'的順序,如果可能的話。如果我能糾正它們存在的順序[#Tools ...],那麼我認爲我的問題會自行解決,並且代碼會起作用。 –

+0

絕對是一個用CSS解決的顯示問題。 ***不要把顯示邏輯放到你的控制器中!!! *** – bdares

回答

0

全部,謝謝您的輸入。我想我仍然有點困惑,爲什麼這不會被視爲紅寶石排序問題,我們可以解決。在我自己做了更多的研究之後,我想出瞭如何解決這個問題。該解決方案的工作原理如下:

toolkit_controller我的指數法,我有以下幾點:

def index 
@tools = Tool.order('name ASC').all 
aAllTools = [] 

for i in @tools 
    aHashedTool = {} 
    aHashedTool["name"] = i.name 
    aHashedTool["description"] = i.description 
    aAllTools << aHashedTool 
end 


@outcome = aAllTools.each_slice(4).to_a.transpose.flatten # Corrects the order. 
logger.debug "#{@outcome}" # Verified. Order is now correct. 

end 

通過使用上面的代碼,我可以簡單地遍歷所有的值就像我一直在我的問題做,似乎一切工作。如果有更優化的解決方案(或者我也應該發佈一個CSS問題),那麼我會很樂意接受它。再次感謝,我很欣賞你的回覆。