2014-11-24 2 views
0

я получил следующие строки, на мой взгляд:Rails .map производит нежелательные [ " п"]

<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"] 

Где делает [ «\ п»] пришел?

+0

не совсем понял, что это «Murtenlauf [" \ n "]'? –

ответ

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

Если на самом деле быть

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

Обратите внимание на отсутствие = (кроме того, я изменил map к each, потому что вы просто переборе массива)

<%= средство оценки кода и вставьте результат в структуру html. Итак, что вы делали, оценивали .map и помещали результат в ваш html. Таким образом, вы будете перебирать код @runnings_past, поместите f.first в html (именно это вы хотите), но затем, когда вы закончили с этим, вы поместили результат сопоставления (по-видимому, это массив с символом возврата строки) в html впоследствии.

+0

Мне нужно использовать карту, так как иначе я просто печатаю activerecord: отношение, но отсутствие «=» делало трюк! большое спасибо!! –

+0

На самом деле вам не нужна «карта», и с ее помощью будет достигнута производительность. ['.map'] (http://www.ruby-doc.org/core-2.1.5/Array.html#method-i-map) будет выполнять итерацию по массиву и все, что будет возвращено из блока в текущем индексе этого массива. «каждый», однако, просто выполняет итерацию по массиву. Если вы еще не сделали что-то еще @runnings_past, где вы хотите, чтобы он был массивом возвращаемых символов, вы действительно должны использовать 'each' – JTG

2

Вы используете неправильный итератор. Вы хотите использовать each вместо map. Карта создает новый массив, в котором каждый элемент является результатом каждой итерации блока. В то время как each просто вызывает данный блок один раз для каждого элемента массива.

Кроме того, как указано @JTG, вы хотите удалить =. Вам нужно всего лишь = для отображения вывода. Вам это не нужно для логики.