[英]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.