繁体   English   中英

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

[英]How do I iterate over an array and output each iteration?

假设我的数组如下所示:

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一个块:最后一次迭代。

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

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

如您所述,将循环放入视图中,如下所示:

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

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

每次循环遍历时,都将重置@ person,@ age实例变量。 这就是为什么只剩下最后一个人。 假设人员信息存储在数据库中,则应使用以下命令加载所有人员:

#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%>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM