2015-05-13 33 views
0

我在nil:NilClass的'each'中收到未定義的方法錯誤。Ruby on Rails .each方法undefined方法`each'for nil:NilClass

模板:

<th>name></th> 
<th>Comment</th> 
<% @guests.each do |guest| %> 
    <tr> 
    <td><%= guest.name %></td> 
    <td><%= guest.comment %></td> 
    </tr> 
<% end %> 

控制器:

class GuestsController < ApplicationController 
    def index 
    @guest = Guest.all 
    end 

    def show 
    @guest = Guest.find(params[:id]) 
    end 

    def new 
    end 

    def create 
    @guest = Guest.new(article_params) 

    @guest.save 
    redirect_to @guest 
    end 

    private 

    def article_params 
    params.require(:guest).permit(:name, :email, :doctor, :Captain, :comment) 
    end 
end 

回答

3

您的#index方法的錯字,用@guests更換@guest

像:

def index 
    @guests = Guest.all 
end 
0

在你index方法使用的是@guest = Guest.all,並在您的視圖文件,您指定<% @guests.each do |guest| %>。所以你應該在你的視圖文件中將@guests更改爲@guest

改變這一狀況,

<% @guest.each do |guest| %> 

在你的視圖文件

0

你無處有@guests,在所有的方法,你有@guest。這就是爲什麼@guests有價值,你還沒有定義它。

0

改變你的代碼是這樣的:

def index 
    @guests = Guest.all 
end 

您正在使用的視圖@guests但在控制器是@guest

+0

感謝您發現tupping fypos。 –

0

未定義的方法`每個」近親:NilClass

這是錯誤,指出您正在嘗試使用nil對象的each方法,那就是您沒有任何東西在您的index行動中被罰款爲@guests

您實際上正在嘗試訪問視圖中索引操作的實例變量@guest

所以你需要修復的錯字:

<% @guest.each do |guest| %> # you wrote @guests 

建議:由於您獲取所有的客人,你應該從@guest改變你的實例變量名@guests更爲合適。在這種情況下,您不必更改視圖代碼。它會按原樣工作。

def index 
    @guests = Guest.all 
end 
+0

Tucking fypo我沒有接到那一個謝謝 –

+0

@SeanpatrickMaiorca,這是很好的錯誤。我們只能通過犯錯誤和向他們學習來學習。 :) –

相關問題