在这里有点生气。
@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时它只记录一个值。
有任何帮助吗?谢谢:))
答案 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 %>