显示一个太多的项目rails

时间:2013-07-02 20:27:17

标签: ruby-on-rails

我正在构建一个简单的应用程序,在许多视图中,我正在显示与某个模型关联的所有对象(多对一关系)。例如,我有一个房屋模型和一个项目模型,其中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 %>

这可能是一个非常简单的问题,但我想避免使用后面的代码,并且想了解为什么会发生这种情况。感谢。

2 个答案:

答案 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)