Ruby for循环仅使用最后一个值

时间:2014-10-06 21:55:54

标签: ruby-on-rails ruby for-loop

在这里有点生气。

@sport = Sport.find(params[:sport])
@activities = Activity.where("sport_id = ?", @sport)

@activites输出正常如下:

<% @activities.each do |a| %>
  <%= a.id %>
<% end %>

显示预测的2个值。

我的问题是,当我写(在控制器中)时:

for a in @activities
  @facilities = Facility.where("id = ?", a.facility_id)
end

我的输出:

<% @facilities.each do |f| %>
  <%= f.id %>
<% end %>

只返回1个值。它应该显示2个值,因为上述每个活动都属于不同的设施。我认为它与for循环有关或当我定义@facilities时它只记录一个值。

有任何帮助吗?谢谢:))

2 个答案:

答案 0 :(得分:4)

问题是你在循环的每次迭代中重新分配@facilities。我想你想要更像的东西:

@facilities = []
for a in @activities
  @facilities << Facility.find(a.facility_id)
end

这可能更好地写为

@facilities = @activities.map {|a| Facility.find(a.facility_id) }

但是,最好是,你已经为:facility

定义了一个关联
@facilities = @activities.map {|a| a.facility}

答案 1 :(得分:1)

你是对的:

  

...当我定义@facilities时,它只注册一个值。

对于此循环的每次迭代:

for a in @activities
  @facilities = Facility.where("id = ?", a.facility_id)
end

你正在篡改@facilities中的先前值并将其替换为新值。在循环结束时,仅保留Facility.where("id = ?", a.facility_id)的最终值。

相反,您可以使用map来获取所有设施的数组:

@facilities = @activites.map do |a|
  Facility.where("id = ?", a.facility_id)
end

然后像以前一样继续观看:

<% @facilities.each do |f| %>
  <%= f.id %>
<% end %>
相关问题