假设我的数组看起来像这样:
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
的一个块:最后一次迭代。
我认为我需要将迭代代码放在视图中而不是控制器中。这是对的吗?
答案 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%>