繁体   English   中英

Ruby on rails .each方法nil:NilClass的未定义方法`each'

[英]Ruby on rails .each method undefined method `each' for nil:NilClass

我在nil:NilClass的“ each”上收到未定义的方法错误。

模板:

<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 

您的一个错字#index方法,更换@guest@guests

喜欢:

def index
  @guests = Guest.all
end

index方法中,您使用@guest = Guest.all ;在视图文件中,您指定了<% @guests.each do |guest| %> <% @guests.each do |guest| %> 所以,你应该改变@guests@guest在您的视图文件。

改变这个

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

在您的视图文件中

您无处拥有@guests ,在所有方法中您都拥有@guest 这就是为什么@guests具有nill值,而您没有定义它的原因。

更改您的代码是这样的:

 def index
  @guests = Guest.all
 end

您在视图中使用@guests,但在控制器中为@guest

nil:NilClass的未定义方法“ each”

这是错误的说明,您正在尝试使用nil对象的each方法,也就是说,在index操作中没有定义为@guests任何内容。

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

因此,您需要解决打字错误:

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

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

def index
  @guests = Guest.all
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM