each_element ведет себя не так, как ожидалось - PullRequest
0 голосов
/ 08 февраля 2012

Когда я нахожусь в irb, и я делаю что-то вроде этого:

node_list.each_element { |e| puts e.text }

Это работает и печатает одну строку текста на каждый возвращенный элемент (плюс я думаю, что он возвращает объект xml).Однако, когда я направляюсь на рельсы и перемещаю вещи между контроллерами, помощниками, представлениями и макетами, он просто сбрасывает объект xml.

Я должен упомянуть, что по веским причинам я использую rails 1.2.3 и ruby.1.8.7.

Gratzi!

1 Ответ

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

Таким образом, ваша проблема заключается в том, что запись выводится на консоль, а не в шаблон.Также в ruby ​​метод по умолчанию возвращает свой последний объект.Таким образом, ваш метод в том виде, в котором он написан, будет циклически перебирать @ child1, печатать каждый текст в консоль, а затем возвращать объект @ child1, после чего ваши erb-теги <% =%> сообщают ему о печати объекта (в данном случае @ child1)

У вас есть два варианта, либо вы можете переместить его в шаблон:

<% tol_get_names(@child1) do |e| %> #note just <% and not <%=
  <%= e.text %>
<% end %>

Или построить свой метод так, чтобы он проходил по циклу при построении строки, а затем возвращал эту строку вместо исходногоobject:

def tol_get_names(child)
  texts = [] #empty array for all our values
  child.each_element { |e| 
    texts << e.text #add the text string to our array
  end
  texts.join(", ") #build a string and seperate it with a comma
end

Несколько способов написать такой метод, но это мой обычный способ.

...