0

我正在构建一个简单的应用程序,并在许多视图中显示与某个模型关联的所有对象(多对一关系)。例如,我有一个房子模型和一个项目模型,其中房子有很多项目。在房子的显示视图上,我有以下代码:

<% @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 %>

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

4

2 回答 2

1

您看到的问题与数据相关。也就是说,您需要弄清楚@house.items 返回的是什么。也许您有一个需要 == true 和空白描述的项目?要解决此问题,请通过打开 rails 控制台、加载有问题的房屋对象并检查 house.items 返回的内容来验证有问题的房屋对象返回的内容。

于 2013-07-02T20:39:50.243 回答
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)
于 2013-07-02T20:55:10.983 回答