Ruby: перебор двумерного хэша - PullRequest
0 голосов
/ 31 марта 2012

Я пытаюсь создать двумерный массив, подобный этому ...

@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

Но когда я перебираю массив для создания строк, он сначала дает мне ключ, а затем весь массив, как этот ...


- 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

Я повторяю, чтобы создать строки (конечно, я должен делать что-то вроде транзакции.id или транзакции .issued_on, но я отлаживаюсь, чтобы вы могли понять, что я имею в виду) ...

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

так что я в итоге получаю такой стол ...

| 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 |

когда мой стол должен выглядеть так

| 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 |

Я не знаю, как просто создать простую таблицу со строками данных транзакций, а не те дополнительные строки с хеш-ключом.

1 Ответ

4 голосов
/ 31 марта 2012

Вы создали хеш с синтаксисом {}, а не массивом.

Если вы хотите перебрать только значения хеша (без ключей), вы можете сделать это:

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

Или вы можете использовать массив для хранения строк:

@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

И тогда ваш существующий шаблон erb должен работать лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...