2012-02-04 17 views
0
<%= nodes %> returns an array of location objects: 

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

当我迭代节点时,迭代不起作用。而不是列出彼此之间的节点(如代码所示),显示与上面相同的数组。如果我从代码中删除'<%= node%>',迭代循环显示的唯一内容就是一个';'。迭代只运行一次,并且不分割数组。对于y中的x和x.each中的do | y | - 迭代不起作用

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

什么是错?

节点数组中的节点由祖先排列。 (但我不知道这是否有什么要说的。)

+0

你的节点对象有'to_s'方法吗?它返回什么? – 2012-02-04 18:11:48

+0

这些地点有一个name_nb字段。当我试图在迭代循环中获取这个字段的内容时('<%= node.name_nb%>),我得到这个错误: 未定义的方法'name_nb'为# 2012-02-04 18:19:52

+2

看来你有数组的数组。试试这个:'<%for node in node%><%= node.inspect%><% end %>'看看它是否有一个数组而不是一个对象。 – Surya 2012-02-04 18:24:10

回答

0

我想做迭代的原因是通过对它们进行选择来编辑节点“集合”。我找到了一个更好的方法来做到这一点,通过使用更好的.where-clause来缩小收集之前,它是由血统安排。

谢谢所有人的回答!

0

我建议不要使用Ruby的for关键字(反正我很久没有见过它),而是用.each代替。 ERB可能会错误地处理for x in y(特别是如果您最终没有提供可选的do关键字)。

试试这个:

<% nodes.each do |node| %> 
    <%= node %>;<br/> 
<% end %> 
+0

我已经尝试过,结果相同。 – 2012-02-04 18:28:44

1

在我看来,你是不是真正得到位置阵列返回。如果你是你期望看到

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

所以它看起来像你节点的方法是什么是责备。确保回报你的想法。

相关问题