0

私は単純なアプリを構築しており、特定のモデル (多対 1 の関係) に関連付けられているすべてのオブジェクトを多くのビューで表示しています。たとえば、家のモデルと、家に多くのアイテムがあるアイテム モデルがあります。家の表示ビューには、次のコードがあります。

<% @house.items.each do |item| %>
    <% if item.needed == true%>
        <p>
        <%= item.description %>
        </p>
    <% end %>
<% end %>

これにより、すべてのアイテムが 1 つの空白アイテムと共に表示されます。すべてのアイテムを削除して空の配列を残しても、まだ空のアイテムが 1 つ残っています。コードを使用してこれをハックできます:

<% @house.items[0..-2].each do |item| %>
    <% if item.needed == true%>
        <p>
        <%= item.description %>
        </p>
    <% end %>
<% end %>

これはおそらく非常に単純な質問ですが、後者のコードの使用は避けたいと思います。なぜこれが起こっているのかを理解したいと思います. ありがとう。

4

2 に答える 2

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 に答える