rails指南示例,单击按钮保存帖子,控制台显示此消息:
在2013-12-25 22:42:04 +0800开始发布“/ posts”127001 由PostsController处理#create as HTML参数: {“utf8”=>“✓”,“authenticity_token”=>“CLalUww3gqnSlED0AWdou6P / U2qya vPqDiBANQOuYgA =“,”post“=> {”title“=>”11“,”text“=>”22“}, “commit”=>“保存帖子”}(0.0ms)开始交易(0.0ms) 回滚事务重定向到http:// 127001:3000 / posts 完成302发现在16ms(ActiveRecord:0.0ms)
在2013-12-25 22:42:04 +0800开始获取127001的“/ posts” 由PostsController处理#index为HTML呈现 布局/应用程序中的posts / index.html.erb(15.6ms)已完成500 31ms内部服务器错误
ActionView :: Template :: Error(未定义的方法`each'for 零:NilClass):
<th>Text</th> </tr> <% @posts.each do |post| %>
=============================================== =======
路线是正确的,为什么帖子是零? rails 4.0.2 ruby 2.0
答案 0 :(得分:28)
在您的帖子控制器中,您需要定义@posts
,这是基于您没有的错误。
# app/controllers/posts_controller.rb
class PostsController < ApplicationController
def index
@posts = Post.all
end
end
由于@posts
未定义,因此调用each
将为nil:NilClass`生成undefined method
每个'。
答案 1 :(得分:9)
要在遇到此错误时详细说明
undefined method `each' for nil:NilClass
这个错误明显地抱怨你在这里调用了每个方法(@posts),这是零。这意味着您尚未在控制器中定义它。由于你没有定义它,这就是它为nil类抱怨未定义方法的原因。
请确保从视图中调用实例变量时进行检查?您必须在控制器中定义可在视图中访问的内容。
如果您在控制器中调用私有方法,有时您也会收到此错误。
答案 2 :(得分:0)
尝试替换此:
<% @posts.each do |post| %>
使用
<% Post.all.each do |post| %>