2012-01-23 44 views
0

だから私はライアンベイツSimple_Form railscastで遊んでいる、と私は、フォームを送信しようとすると、私は次のエラーを取得する:未定義のメソッド `呼び出し」:NilClass

NoMethodError in Products#index 

Showing /home/panos/sites/store/app/views/products/index.html.erb where line #8 raised: 

undefined method `name' for nil:NilClass 
Extracted source (around line #8): 

5:  <h2><%= link_to product.name, product %></h2> 
6:  <div> 
7:  Price: <%= number_to_currency product.price %><br /> 
8:  Category: <%= product.category.name %><br /> 
9:  <%= link_to "Edit", [:edit, product] %> 
10:  </div> 
11: <% end %> 
Rails.root: /home/panos/sites/store 

Application Trace | Framework Trace | Full Trace 
app/views/products/index.html.erb:8:in `block in _app_views_products_index_html_erb___762171406_75615480_549568821' 
app/views/products/index.html.erb:4:in `each' 
app/views/products/index.html.erb:4:in `_app_views_products_index_html_erb___762171406_75615480_549568821' 

はここに私の指標です。 html.erbファイル:

<% title "Products" %> 

<div class="product"> 
    <% for product in @products %> 
    <h2><%= link_to product.name, product %></h2> 
    <div> 
     Price: <%= number_to_currency product.price %><br /> 
     Category: <%= product.category.name %><br /> 
     <%= link_to "Edit", [:edit, product] %> 
    </div> 
    <% end %> 
</div> 

<p><%= link_to "New Product", new_product_path %></p> 

そして、ここでは私のform.html.erbファイルです:

<%= simple_form_for @product do |f| %> 
    <%= f.error_messages %> 
    <table border="1"> 
    <tr> 
    <td><%= f.input :name %></td> 
    <td><%= f.input :price, :hint => "prices should be in USD" %></td> 
    <td><%= f.input :released_on %></td> 
    <td> <%= f.association :category, :include_blank => false %></td> 
    <td><%= f.input :rating, :collection => 1..5, :as => :radio %></td> 
    <td><%= f.input :discontinued %></td> 
    <td><%= f.button :submit %></td> 
    </tr> 

<% end %> 

私が知っていますカテゴリフィールドが空(nill)だったのでエラーが発生しますが、それを修正する方法はわかりませんので、nill値でも表示できます。

誰でも手伝いできますか?

Category: <%= product.category.name unless product.category.nil? %> 

答えて

2

はこれを試してみてください。

Category: <%= product.category.name if product.category %> または

Category: <%= product.category.try(:name) %>

try方法は、人々の多くによって上の眉されているが。

3

以上簡潔に少し:

0

product.categoryの値がnilなので、product.categoryがdereferencedされて 'name'にアクセスすると、例外が発生します。

執筆時点で提供されている回答のうち、「除外する」解決策はnilを参照することを防止します。 「試行」ソリューションは、例外が発生した場合に安全に例外をキャッチします。

関連する問題