Ruby on rails .each方法undefined方法`每个'为零:NilClass

时间:2015-05-13 08:19:04

标签: ruby-on-rails ruby

我在'each'上收到一个未定义的方法错误为零: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 

5 个答案:

答案 0 :(得分:3)

您的#index方法中有拼写错误,请将@guest替换为@guests

像:

def index
  @guests = Guest.all
end

答案 1 :(得分:0)

在您使用index的{​​{1}}方法中,在视图文件中,您已指定@guest = Guest.all。因此,您应该在视图文件中将<% @guests.each do |guest| %>更改为@guests

改变这一点,

@guest
视图文件中的

答案 2 :(得分:0)

你在@guests的所有方法中都没有@guest。这就是@guests具有nill值的原因,您还没有定义它。

答案 3 :(得分:0)

更改您的代码是这样的:

 def index
  @guests = Guest.all
 end

您在视图中使用@guests但在控制器中它是@guest

答案 4 :(得分:0)

  

未定义的方法`每个&#39;为零:NilClass

这是错误的说明,您尝试使用each对象的nil方法,即您@guests中没有任何定义为index的内容行动。

您实际上是在尝试访问视图中索引操作的实例变量@guest

所以你需要修正错字:

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

建议:由于您要获取所有来宾,因此您应该将实例变量名称从@guest更改为@guests更合适。在这种情况下,您不必更改视图代码。它会按原样运作。

def index
  @guests = Guest.all
end