2017-06-16 6 views
1

これは私が遭遇しているエラーです。私はそれをどのように修正できるのかと思いました。私はレールが新しく、それは考えていなかった。それぞれが方法だった。もし誰かが私を助けてくれたら、それは非常に評価されるだろう。ありがとうレールのエラーを修正するには

undefined method `each' for nil:NilClass

これはエラーが発生しているコードです。

<h1>Portfolio Items</h1> 

<% @portfolio_items.each do |portfolio_item| %> 
    <p><%= portfolio_item.title %></p> 
    <p><%= portfolio_item.subtitle %></p> 
    <p><%= portfolio_item.body %></p> 
    <%= image_tag portfolio_item.thumb_image unless portfolio_item.thumb_image.nil? %> 
<% end %> 
+0

を? –

+0

'@portfolio_items'に値がない(つまり' nil'です)、あなたのコントローラを共有してエラーを見つけやすくなります。 – Gerry

答えて

1

ようこそ。

var @portfolio_itemsまたはその綴りに誤りがあります。 あなたがそれを定義していれば、それは少なくともArrayのようなデータ構造を持っていて、このエラーを防ぎました。これは、より多くの詳細をあなたの質問を更新してください解決しないと、私はこの答えを更新する場合は

オブジェクトのような配列の一部がActiveRecord::Associations::CollectionProxy

In ruby undefined @instance vars are set with nil and no error is raised.

になります。

1

そうした場合:

[nil].each{|e| p e} 
=> nil 

あなたは、配列内の要素があります見ることができますので、あなたはeachは、あなたが反復し、その内容を印刷することができます使用することができ、あなたが内部nil値があります表示されます。

あなたが書く一方でいる場合:

undefined method `each' for nil:NilClass (NoMethodError) 

に適用することができ、すべてのメソッドの間に利用可能なeach方法はありませんと言うことです:

nil.each{|e| p e} 

あなたは、エラーが発生しますnil。あなたはそれを反復しようとすると、あなたのコードで

は、おそらくコントローラに、あなたは@portfolio_itemsを定義しているが、いくつかの理由で、これはあなたが必要な値を取っていない、それはnil値を取得していますので、そのエラーが発生します。

1

あなたは@portfolio_itemsが配列であることを期待していますが、@portfolio_itemsには値が割り当てられていないか、コントローラアクションでnilが割り当てられています。

1

リストはnilで、あなたのビューテンプレート

<h1>Portfolio Items</h1> 

<% if @portfolio_items.count == 0 %> 
    <p>There are no items</p> 
<% else %> 
    <% @portfolio_items.each do |portfolio_item| %> 
    <p><%= portfolio_item.title %></p> 
    <p><%= portfolio_item.subtitle %></p> 
    <p><%= portfolio_item.body %></p> 
    <%= image_tag portfolio_item.thumb_image unless portfolio_item.thumb_image.nil? %> 
    <% end %> 
<% end %> 
1

でそれを処理するためif...elseチェックを行うことができますあなたは、使用を試すことができます。

(@portfolio_items || []).each do |portfolio_item| 
1

インスタンス変数@portfolio_itemsがnilとeachループですnil以上はスローエラーです。

ので、コードの下に従ってください:あなたは `@のportfolio_items`を定義します

<h1>Portfolio Items</h1> 

<% if @portfolio_items.nil? %> 
    No Item to display. 
<% else %> 
    <% @portfolio_items.each do |portfolio_item| %> 
    <p><%= portfolio_item.title %></p> 
    <p><%= portfolio_item.subtitle %></p> 
    <p><%= portfolio_item.body %></p> 
    <%= image_tag portfolio_item.thumb_image unless portfolio_item.thumb_image.nil? %> 
    <% end %> 
<% end %> 
関連する問題