2011-05-13 46 views
0

我生成了一個腳手架,我創建了一個隨便的應用程序。我想在應用程序的任何地方(application.html.erb中)列出側欄上的腳手架項目。 我的左邊一列,在application.html.erb看起來像這樣:Rails列表問題

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

點擊每個項目將導致它的顯示方法。 運行,每當我嘗試訪問任何項目的任何方法,它讓我看到下面的錯誤後:

>  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 

而被跟隨的代碼是左邊欄的代碼。 我該如何解決這個問題?

回答

1

Rails抱怨,因爲你試圖將nil當作一個數組來處理。沒有發佈application.html.erb的行號,我不得不猜測,但我猜@items是零。

如果您在佈局中包含此項,則需要確保您的每個請求都設置了@items陣列。是嗎?這樣做的一個簡單方法是將before_filter放入application_controller.rb中。

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

這假定使用該佈局所有控制器擴展應用程序控制器。

+0

這不是問題所在。無論如何,謝謝 – Ariel 2011-05-14 16:22:08

+0

@Ariel,從我從這個問題的理解中,@ drewbob的回答似乎很有用。也許你應該更好地解釋問題或問題。 – 2011-05-14 16:48:49

0

確保您的控制器有這樣的:

@items = Item.all 

然後在你看來,你想這樣的:

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

它可以失敗,因爲links的一個沒有標題。

+0

不是這樣。所有鏈接都有一個標題 – Ariel 2011-05-14 16:21:44