2011-12-01 72 views
0

我正在使用一些基本的Rails腳手架,並且知道實例變量通常用於視圖中以顯示從控制器傳遞的數據。Rails - 實例變量nil對象在視圖中

在我的應用程序,有一個在數據庫中的幾個樣本用戶(我可以在控制檯拉起使用results = Result.all

在我results_controller文件時,指數行動也有這樣的代碼(由導軌自動生成)

@results = Result.all 

所以我想找出並顯示有多少用戶有在NEW.html.erb(不index.html.erb)上,所以我把這個

<%= @results.count %> 

in views/results/NEW.html.erb但它給了我一個關於零對象的錯誤消息。你可以解釋嗎?

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.count 

但是,如果我把這個

<%= @results.count %> 
在INDEX.html.erb

,它顯示了數...

注意:這樣做的目的是以下幾點:上new.html.erb,我有一個表單讓用戶輸入一些簡單的信息。我正在使用計劃使用<%= @ results.count%>告訴用戶在該頁面上有多少人已經提交了信息...

如果你不能回答這個問題,你能否解釋另一種方法達到同樣的效果?

+0

您是否嘗試過這個同樣的Rails環境(和數據庫)下? – m33lky

+0

是的,相同的應用程序,相同的環境,相同的數據庫... @ results.count在index.html.erb中工作,但不在new.html.erb中 – Leahcim

+0

您的聲音也需要'@results = Result.all'在'新'行動以及'索引'行動。 – zetetic

回答

1

它沒有在問題中指定,所以請原諒我,如果你已經這樣做。但實例變量需要在與當前訪問的操作相關的方法中聲明。在這種情況下,這是新的行爲。所以,你應該有一些代碼看起來是這樣的:

def new 
    @result = Result.new 
    @results = Result.all 
end 

你也可以替代@results實例方法爲:

@results_count = Result.count 
+0

非常感謝您的幫助 – Leahcim

+0

沒問題。樂意效勞。 – adimitri