2015-08-24 84 views
0

我有一個SQL查詢將信息加載到一個哈希中。我想遍歷這些信息並將其輸出到視圖中。如何獲得每個循環中的前一個項目

如果user_id與上一個對象的user_id相同,我不想顯示user_id,只是名稱和其他所有內容。看起來邏輯應該很簡單,但作爲Ruby和Rails的新手,我不確定真正可以做到這一點的是什麼。

我是想這樣的事情,但prev_id從未得到第一次迭代後更新:

<% @session.each_with_index do |s, x| %> 
    <% if x == 0 then prev_id = 'nil' end %> 
    <% curr_id = s['id'] %> 


    <% if curr_id != prev_id %> 
     <%= s['id'] %> 
    <% end %> 

    <%= s['name'] %> 
    <%= s['count'] %><br> 
    <% prev_id = curr_id %> 
<% end %> 

任何幫助,不勝感激!

+1

馬特,我建議你在將來做選擇(可能至少需要幾個小時)之前暫緩一會兒。快速選擇可能會阻礙其他答案,對於那些仍在努力解答他們答案的人來說,imo並不考慮。沒有急於。 –

+1

你的邏輯不應該在你看來,它應該在你的控制器中。將結果分配給變量並訪問視圖中的變量。 –

回答

2

你必須聲明你prev_id外循環爲它迭代之間仍然存在:

<% prev_id = nil %> 
<% @session.each_with_index do |s, x| %> 
    <% if x == 0 then prev_id = 'nil' end %> 
    <% curr_id = s['id'] %> 


    <% if curr_id != prev_id %> 
     <%= s['id'] %> 
    <% end %> 

    <%= s['name'] %> 
    <%= s['count'] %><br> 
    <% prev_id = curr_id %> 
<% end %> 
+0

當然這會很簡單。非常感謝你。 我會盡我所能接受答案。 –

+0

@ Matt-Lepley乾杯! [這可能有所幫助](http://www.techotopia.com/index.php/Ruby_Variable_Scope)瞭解變量範圍 – sjagr

2

您應該使用chunk

<% @session.chunk{|s| s["id"]}.each do |curr_id, a| %> 
    <%= curr_id %> 
    <% a.each do |s| %>  
    <%= s["name"] %> 
    <%= s["count"] %><br> 
    <% end %> 
<% end %> 
+0

嘿@sawa,我很感謝這個幫助,但是我也需要這個名字纔會出現一次,就像ID。我不確定這是否可以處理大塊。 –

+1

Matt,只要將'<%= s [「name']%>'改爲'<%= a.first [」name「]%>'並將其移動到'<%a.each do | s |%之前。 >'。如果你想爲塊的第一個記錄設置不同的格式,那麼首先完成第一條記錄的循環,然後'a [1 ..- 1] .each do | s |%...'。[Enumerable #chunk](http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-chunk)是您的問題的Ruby方式。 –

相關問題