我正在构建一个简单的应用程序,在许多视图中,我正在显示与某个模型关联的所有对象(多对一关系)。例如,我有一个房屋模型和一个项目模型,其中House有许多项目。在房子的显示视图中,我有以下代码:
<% @house.items.each do |item| %>
<% if item.needed == true%>
<p>
<%= item.description %>
</p>
<% end %>
<% end %>
这将显示所有项目以及一个空白项目。如果我删除所有项目,留下一个空数组仍然有一个空项目。我可以使用代码破解这个:
<% @house.items[0..-2].each do |item| %>
<% if item.needed == true%>
<p>
<%= item.description %>
</p>
<% end %>
<% end %>
这可能是一个非常简单的问题,但我想避免使用后面的代码,并且想了解为什么会发生这种情况。感谢。
答案 0 :(得分:1)
您看到的问题与数据有关。这就是说,你需要弄清楚@ house.items返回的是什么。也许你有一个需要== true和空白描述的项目?要解决此问题,请通过打开rails控制台,加载有问题的房屋对象并检查house.items返回的内容来验证相关房屋对象返回的内容。
答案 1 :(得分:0)
使用@house.items.new
设置新的Item
对象时,即使新项目尚未保留到数据库,它也会更改@house.items
数组。例如:
items = @house.items
items.length
# => 3
item = @house.items.new
items.length
# => 4
您可以在循环中添加支票,例如if item.persisted?
或unless item.new_record?
。或者,你可以用这种方式构建新项目,在实际保存到数据库之前,它不会包含在@house.items
中:
item = Item.new(house_id: @house.id, needed: true)