each_element的行为不符合预期

时间:2012-02-07 21:39:50

标签: ruby-on-rails xml rexml

当我在irb时,我做了这样的事情:

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

它可以工作并为每个返回的元素打印一行文本(另外我认为它返回xml对象)。但是,当我转向rails并在控制器,帮助器,视图和布局之间移动时,它只会转储xml对象。

我应该提一下,我有充分的理由使用rails 1.2.3和ruby 1.8.7。

的Gratzi!

1 个答案:

答案 0 :(得分:0)

所以你所拥有的问题是将写入写入控制台而不是模板。此外,在ruby中,a方法默认返回其最后一个对象。因此,您编写的方法将遍历@ child1,将每个文本打印到控制台,然后返回@ child1对象,此时您的erb标记为<%=%>告诉它打印对象(在这种情况下为@ child1)

您有两种选择,要么可以将其移出模板:

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

或者构建你的方法,使它循环构建一个字符串,然后返回该字符串而不是原始对象:

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

你可以通过几种方法编写这种方法,但这是我常用的方法。