2012-02-04 56 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>] 

所以它看起來像你節點的方法是什麼是責備。確保回報你的想法。

相關問題