2017-11-24 4 views
-1

私はテーブルに表示したいhas_many関連があります。各エージェントは最大3つの販売を行うことができますが、エージェントと同じ行にそれらをリストしたいと思います。has_manyループが未定義のメソッド

undefined method `each' for nil:NilClass on the <% sales.each do |s| %> line. 

私は上記のエラーを取得しています、イベントの各列

<table> 
    <tr> 
     <td>Agent</td> 
     <td>Date</td> 
     <td>Product</td> 
     <td>Price</td> 
     <td>Date</td> 
     <td>Product</td> 
     <td>Price</td> 
     <td>Date</td> 
     <td>Product</td> 
     <td>Price</td> 
    </tr> 
    <% @agent.sales.each do |agent, sales| %> 
    <tr> 
     <td><% agent.name %></td> 
     <% sales.each do |s| %> 
     <td><%= s.date %></td> 
     <td><%= s.product %></td> 
     <td><%= s.price %></td> 
     <% end %> 
    </tr> 
    <% end %> 
</table> 
+1

どのように '@ agent'を定義していますか?' @ agent.sales'があなたに与えることは何ですか? – inveterateliterate

+0

試行では:idのparamsを呼び出すだけです。 @ agent.salesは私に次のものを与えます:# DollarChills

答えて

1

開始するには、@agent.salesであるためにはActiveRecord_Associations_CollectionProxyでは、このオブジェクトをハッシュではなく配列のように考えることができます。キー(agent)と値で何かを、

@agent.sales.each do |agent, sale|>は、この構文は、ハッシュ内の各キーと値のペアのために言っている:あなたは最初に、あなたがハッシュのようにそれを処理して表示され、あなたのループを書いた方法

sale)。

あなたがループを実行しようと二回目は、あなたが存在しない反復子の「値」部分にそれを実行している、したがって、ラインsales.each do |sale|

上の誤差は本当に、あなたが非常にありますそれを考えすぎている。ちょうどあなたの最初のイテレータを削除し、残りを保つ:

<tr> 
    <td><% @agent.name %></td> 
    <% @agent.sales.each do |s| %> 
    <td><%= s.date %></td> 
    <td><%= s.product %></td> 
    <td><%= s.price %></td> 
    <% end %> 
</tr> 

ところで、あなたは、同じ原理を適用することができ、あまりにもあなたのヘッダーをリファクタリング:

<tr> 
    <td>Name</td> 
    <% 3.times do |n| %> 
    <td>Date</td> 
    <td>Product</td> 
    <td>Price</td> 
    <% end %> 
</tr> 

これは、あなたの制約は3本の、最大の販売であることを前提としています。

1

のためのデータが存在ふてくされてありますが、これは動作するはずです:

<table> 
    <tr> 
     <td>Agent</td> 
     <td>Date</td> 
     <td>Product</td> 
     <td>Price</td> 
     <td>Date</td> 
     <td>Product</td> 
     <td>Price</td> 
     <td>Date</td> 
     <td>Product</td> 
     <td>Price</td> 
    </tr> 
    <% @agent.sales.each do |sale| %> 
    <tr> 
     <td><% @agent.name %></td> 
     <td><%= sale.date %></td> 
     <td><%= sale.product %></td> 
     <td><%= sale.price %></td> 
    </tr> 
    <% end %> 
</table> 
関連する問題