0

スキャフォールドを生成し、カジュアルなアプリケーションを作成しました。アプリケーションのあらゆる場所(application.html.erb内)のサイドバーにスキャフォールドアイテムを一覧表示したいと思います。application.html.erbの左側の列は次のようになります。

>  <div id="leftcolumn">
>     <% @items.each do |link| %>
>       <%= link_to link.title, link %>
>     <% end %>
>  </div>

各アイテムをクリックすると、Showメソッドが表示されます。それを実行した後、任意のアイテムの任意のメソッドにアクセスしようとすると、次のエラーが表示されます。

>     NoMethodError in Items#show
>     
>     Showing F:/Rails/items-list/app/views/layouts/application.html.erb
>     where line #17 raised:
>     
>     You have a nil object when you didn't expect it!
>     You might have expected an instance of Array.
>     The error occurred while evaluating nil.each

そして、続くコードは左の列のコードです。どうすれば修正できますか?

4

2 に答える 2

1

nil を配列として処理しようとしているため、Rails が不平を言っています。@itemsapplication.html.erb の行番号を掲載せずに推測する必要がありますが、それはゼロだと思います。

これをレイアウトに含める場合は、@itemsリクエストごとに配列が設定されていることを確認する必要があります。それは...ですか?これを行う簡単な方法の 1 つbefore_filterは、application_controller.rb に a を追加することです。

class ApplicationController < ActionController::Base
    ...
    before_filter setup_items
    ...
    def setup_items
        @items = Item.all
    end
    ...
end

これは、このレイアウトを使用するすべてのコントローラーがアプリケーション コントローラーを拡張することを前提としています。

于 2011-05-13T22:14:28.720 に答える
0

コントローラーにこれがあることを確認してください:

@items = Item.all

次に、ビューでこれが必要です:

<div id="leftcolumn">
   <% @items.each do |link| %>
     <%= link_to link.title, link if link.title%>
   <% end %>
</div>

いずれかのタイトルにタイトルがないため、失敗している可能性がありますlinks

于 2011-05-13T23:16:31.247 に答える