2012-03-30 15 views
-1

Ich versuche, ein zweidimensionales Array wie diese zu erstellen ...Rubin: Iterieren über einen zweidimensionalen Hash

@transactions = {} 
@expenses.each do |expense| 
    @transactions[expense.id.to_s + '-expense'] = {'identifier' => expense.id.to_s + '-expense', 'id' => expense.id, 'type' => 'expense', 'issued_on' => expense.issued_on, 'amount' => expense.amount} 
end 

@invoices.each do |invoice| 
    @transactions[invoice.id.to_s + '-invoice'] = {'identifier' => invoice.id.to_s + '-invoice', 'id' => invoice.id, 'type' => 'invoice', 'issued_on' => invoice.issued_on, 'amount' => invoice.total} 
end 

Aber wenn ich über das Array iterieren Zeilen zu erstellen, es gibt mir den Schlüssel zuerst, dann das ganze Array wie folgt ...


- 1-expense 
- identifier: 1-expense 
    id: 1 
    type: expense 
    issued_on: 2012-05-03 
    amount: 8.99 
--- 
- 2-expense 
- identifier: 2-expense 
    id: 2 
    type: expense 
    issued_on: 2012-05-25 
    amount: 4.96 
--- 
- 3-expense 
- identifier: 3-expense 
    id: 3 
    type: expense 
    issued_on: 2012-05-01 
    amount: 56.08 

I iterieren Reihen erstellen (natürlich im angeblich so etwas wie transaction.id oder transaction.issued_on zu tun, aber ich debuggen so können Sie sehen, was ich meine) ...

<% @transactions.each do |transaction| %> 
    <tr class="<%= cycle("odd", "even") %>"> 
    <td> 
     <%= debug transaction %> 
    </td> 
    <td></td> 
    <td></td> 
    <td></td> 
    </tr> 
    <% end %> 

so habe ich am Ende mit einer Tabelle wie folgt auf ...

| 1-expense | 
| identifier: 1-expense, id: 1, type: expense, issued_on: 2012-05-03, amount: 8.99 | 
| 2-expense | 
| identifier: 2-expense, id: 2, type: expense, issued_on: 2012-05-25, amount: 4.96 | 
| 3-expense | 
| identifier: 3-expense, id: 3, type: expense, issued_on: 2012-05-01, amount: 56.08 | 

wenn meine Tabelle wie diese

| identifier: 1-expense, id: 1, type: expense, issued_on: 2012-05-03, amount: 8.99 | 
| identifier: 2-expense, id: 2, type: expense, issued_on: 2012-05-25, amount: 4.96 | 
| identifier: 3-expense, id: 3, type: expense, issued_on: 2012-05-01, amount: 56.08 | 

Ich weiß nicht aussehen soll, wie man nur Erstellen Sie eine einfache Tabelle mit Transaktionsdatenzeilen und nicht diese zusätzlichen Zeilen mit dem Hash-Schlüssel.

Antwort

4

Sie haben einen Hash mit der {}-Syntax erstellt, kein Array.

Wenn Sie nur die Werte der Hash iterieren möchten (ohne die Tasten), können Sie dies tun:

<% @transactions.each_value do |transaction| %> 
... 

Oder könnten Sie ein Array verwenden, um die Zeilen zu halten:

@transactions = [] 
@expenses.each do |expense| 
    @transactions << {'identifier' => expense.id.to_s + '-expense', 'id' => expense.id, 'type' => 'expense', 'issued_on' => expense.issued_on, 'amount' => expense.amount} 
end 

@invoices.each do |invoice| 
    @transactions << {'identifier' => invoice.id.to_s + '-invoice', 'id' => invoice.id, 'type' => 'invoice', 'issued_on' => invoice.issued_on, 'amount' => invoice.total} 
end 

Und dann sollte Ihre bestehende Erb-Vorlage besser funktionieren.