使用application_controller中的before_filter访问application.html.erb中的模型会导致意外的html

时间:2014-06-26 08:31:42

标签: html ruby-on-rails ruby ruby-on-rails-4

我想访问application.html.erb文件中的模型。为此,我在application_controller.rb中定义了一个before_filter:

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。它看起来像这样:

[#&lt;ageid: 1, name: &quot;Herren&quot;, created_at: &quot;2014-06-26 08:02:58&quot;, updated_at: &quot;2014-06-26 08:02:58&quot;&gt;, #&lt;ageid: 2, name: &quot;A-Jugend&quot;, created_at: &quot;2014-06-26 08:02:58&quot;, updated_at: &quot;2014-06-26 08:02:58&quot;&gt;, #&lt;ageid: 3, name: &quot;B-Jugend&quot;, created_at: &quot;2014-06-26 08:02:58&quot;, updated_at: &quot;2014-06-26 08:02:58&quot;&gt;]           </ul>

我在导航栏中有此代码。所以我的导航栏是通过这个附加文本扩展的。在正文中添加循环会导致相同的输出。

2 个答案:

答案 0 :(得分:1)

您不希望循环上出现=符号,请将其更改为:

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

<%= @ages ...让你告诉rails显示数组

答案 1 :(得分:1)

只需写为

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

@agesArray个实例。完全迭代完成后,Array#each会返回接收器本身。 <%=.. %>表示您正在告诉执行每个m,方法并打印#each方法的结果,这是您遇到的问题。因此,请告诉您的模板执行该方法,不要打印它的结果,并且正确的语法是<%.. %>