Для x в y и x.each сделать | y |- итерации не работают - PullRequest
0 голосов
/ 04 февраля 2012
<%= nodes %> returns an array of location objects:

#<Location:0x7f24858b5078>#<Location:0x7f24858b4d58>#<Location:0x7f24858b4ab0>

Когда я перебираю узлы, итерация не работает.Вместо перечисления узлов друг под другом (как сказано в коде) отображается тот же массив, что и выше.Если я удалю «<% = node%>» из кода, единственное, что будет показано в цикле итерации, - это один «;».Итерация выполняется только один раз и без разбиения массива.

<%= nodes %>
<% for node in nodes %>
  <%= node %>;<br />
<% end %>

Что не так?

Узлы в массиве узлов расположены по наследству.(Хотя я не знаю, есть ли что сказать.)

Ответы [ 3 ]

1 голос
/ 04 февраля 2012

Мне кажется, что вы на самом деле не возвращаете массив Locations.если бы вы были, вы бы ожидали увидеть

[#<Location:0x7f24858b5078>,#<Location:0x7f24858b4d58>,#<Location:0x7f24858b4ab0>]

, так что похоже, что вы виноваты в методе Nodes.убедитесь, что он возвращает то, что вы думаете.

0 голосов
/ 08 февраля 2012

Причина, по которой я хотел выполнить итерацию, состояла в том, чтобы отредактировать «коллекцию» узлов, выполнив для них выбор .select.Я нашел лучший способ сделать это, используя лучшее условие .where, чтобы сузить коллекцию до того, как она была упорядочена по наследству.

Спасибо всем за ответы!

0 голосов
/ 04 февраля 2012

Я бы посоветовал не использовать ключевое слово for Руби (я все равно давно его не видел), а вместо этого использовать .each. ERB может обработать for x in y неправильно (особенно если вы не указали необязательное ключевое слово do в конце).

Попробуйте вместо этого:

<% nodes.each do |node| %>
  <%= node %>;<br/>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...