如何迭代数组并输出每次迭代?

时间:2014-05-16 20:48:49

标签: ruby-on-rails ruby arrays

假设我的数组看起来像这样:

People => [
  {
    Person => Jack,
    Age => 25
  },
  {
    Person => Frank,
    Age => 45
  },
  {
    Person => Molly,
    Age => 30
  }
]

我认为迭代代码将在控制器中,因为它处理数据。我的控制器代码如下所示:

class People < ApplicationController
  def list
    people.each do |hash|
      @person = hash[person]
      @age = hash[age]
    end
  end
end

我的观看代码如下:

<h1>People</h1>
<p>
  Person: <%= @person %> <br/>
  Age: <%= @age %> <br/>
  <br/>
</p>

当我加载页面时,而不是看到三个输出块,每个人一个,我只看到Molly的一个块:最后一次迭代。

我认为我需要将迭代代码放在视图中而不是控制器中。这是对的吗?

2 个答案:

答案 0 :(得分:4)

是的,当您设置实例变量时,会发生什么。在控制器中@person,它会自动被抛出到视图中。在这种情况下,您的代码会覆盖@person与最后一个可用的人。

正如您所提到的,将循环放在视图中,就像这样:

<h1>People</h1>
<% @people.each do |person| %>
  <p>
    Age: <%= person.age %> <br/>
    <br/>
  </p>
<% end %>

(假设您设置了一个名为@people的实例变量,例如。@people = Person.all

答案 1 :(得分:0)

每次循环时都会重置@person,@ item实例变量。这就是为什么你只留下最后一个人。假设人员信息存储在您的数据库中,您应该加载所有人:

#controller
@people=Person.all

#then in the view
<h1>People</h1>
<%@people.each do |person|%>    
  <p>
   Person: <%=person.person %> <br/>
   Age: <%= person.age %> <br/>
  <br/>
  </p>
<%end%>