2014-11-24 47 views
0

我得到了在我看來,下面幾行:Rails的.MAP產生不需要[ 「 n」]

<p><%= @runnings_past.map do |f| %> 
     <%= f.title %> 
    <% end %> 
    </p> 

這在控制檯工作得很好 - >輸出:

2.1.2 :076 > @runnings_past.map do |f| 
2.1.2 :077 >  f.title 
2.1.2 :078?> end 
=> ["Murtenlauf"] 
2.1.2 :079 > 

但當我在視圖中使用它上面看到的,我得到這樣的表達式:

Murtenlauf ["\n"] 

在什麼地方[「\ n」]從何而來?

+0

不太明白,那就是這個'Murtenlauf [「\ n」]'? – 2014-11-24 15:53:45

回答

2
<%= @runnings_past.map do |f| %> 
    <%= f.title %> 
<% end %> 

實際上應該是

<% @runnings_past.each do |f| %> 
    <%= f.title %> 
<% end %> 

通知缺乏=(此外,我改變mapeach,因爲你只是通過遍歷數組)

<%=手段評估代碼並將結果插入到html結構中。所以你在做的是評估.map並把結果放到你的html中。所以你可以遍歷@runnings_past代碼,將f.first放入html(這正是你想要的),但是當你完成這個時,你將放置映射的結果(這顯然是一個帶有字符串返回字符的數組)之後進入html。

+0

我需要使用map,否則我只是在打印activerecord:關係,但是缺少'='的技巧!非常感謝!! – 2014-11-24 15:55:25

+0

你實際上不需要'map',使用它會有性能上的提升。 ['.map'](http://www.ruby-doc.org/core-2.1.5/Array.html#method-i-map)將遍歷數組,並且塊的任何返回將被放置在該數組的當前索引中。然而'each'只是遍歷數組。除非有其他的東西,你在做@ runnings_past之後,你希望它是一個返回字符數組,你應該真的使用'each' – JTG 2014-11-24 16:01:03

2

您正在使用錯誤的迭代器。您想使用each而不是map。 Map創建一個新的數組,其中每個元素是塊中每次迭代的結果。而each只是爲數組中的每個元素調用給定的塊一次。

另外,正如@JTG指出的那樣,您想要刪除=。您只需要=即可顯示輸出。你不需要邏輯。