Использование before_filter в application_controller для доступа к модели в application.html.erb приводит к неожиданному html

#html #ruby-on-rails #ruby #ruby-on-rails-4

#HTML #ruby-on-rails #ruby #ruby-on-rails-4

Вопрос:

Я хочу получить доступ к модели в моем файле application.html.erb. Для этого я определил before_filter в application_controller.rb:

 before_filter :populate_ages

protected

def populate_ages
  @ages= Ages.all
end
  

В моем application.html.erb у меня есть следующее:

 <%= @ages.each do |age| %>
  <p><%= age.name %></p>
<% end %>
  

Имена отображаются правильно, но я получаю дополнительный вывод, который представляет собой массив @ages . Это выглядит так:

 [#amp;<ageid: 1, name: amp;quot;Herrenamp;quot;, created_at: amp;quot;2014-06-26 08:02:58amp;quot;, updated_at: amp;quot;2014-06-26 08:02:58amp;quot;amp;>, #amp;<ageid: 2, name: amp;quot;A-Jugendamp;quot;, created_at: amp;quot;2014-06-26 08:02:58amp;quot;, updated_at: amp;quot;2014-06-26 08:02:58amp;quot;amp;>, #amp;<ageid: 3, name: amp;quot;B-Jugendamp;quot;, created_at: amp;quot;2014-06-26 08:02:58amp;quot;, updated_at: amp;quot;2014-06-26 08:02:58amp;quot;amp;>]           </ul>
  

У меня есть этот код на панели навигации. Итак, моя панель навигации расширена этим дополнительным текстом. Добавление цикла в тело приводит к тому же результату.

Ответ №1:

Вам не нужен знак = в цикле, измените его на:

 <% @ages.each do |age| %>
  <p><%= age.name %></p>
<% end %>
  

Имея <%= @ages ... вы указываете rails для отображения массива

Ответ №2:

Просто напишите как

 <% @ages.each do |age| %>
  <p><%= age.name %></p>
<% end %>
  

@ages является Array экземпляром. Теперь Array#each возвращает сам приемник, когда завершена полная итерация. <%=.. %> означает, что вы указываете выполнить каждый m,метод и распечатать результат #each метода, с которым вы столкнулись. проблема, с которой вы столкнулись. Таким образом, сообщите, что ваш шаблон выполнил метод, не печатайте его результат, и для этого правильный синтаксис <%.. %> .