Ruby on rails RubyonRails错误:计算nil.each时出错

Ruby on rails RubyonRails错误:计算nil.each时出错,ruby-on-rails,ruby,null,Ruby On Rails,Ruby,Null,我正在尝试学习Ruby,但我遇到了以下错误: 计算nil时出错。每个 我在这里读《入门指南》 下面是index.html.erb中的一段代码: <h1>Listing snippets</h1> <div class="snippets"> <% @posts.each do |post| %> <h2><%= post.title %></h2> <p><%= link_to

我正在尝试学习Ruby,但我遇到了以下错误:

计算nil时出错。每个

我在这里读《入门指南》

下面是index.html.erb中的一段代码:

<h1>Listing snippets</h1>
<div class="snippets">
<% @posts.each do |post| %>
    <h2><%= post.title %></h2>
    <p><%= link_to 'View', post %> | <%= link_to 'Edit', edit_post_path(post) %> | <%= link_to 'Delete', post, :confirm => 'Are you sure?', :method => :delete %></p>
<% end %>
</div>
我做错了什么? 谢谢

PS:我看到它们显示在这里http://127.0.0.1:3000/posts但是如果我想将它们显示在根文件夹(http://127.0.0.1:3000/

将路由添加到routes.rb(仅适用于Rails 2.x):

对于Rails 3.x,请查看以下内容:

计算nil时出错。每个都意味着@posts不是数组。您是否创建了posts表?

将路由添加到routes.rb(仅适用于Rails 2.x):

对于Rails 3.x,请查看以下内容:

计算nil时出错。每个都意味着@posts不是数组。您创建了posts表吗?

您应该创建一个表,并将post逻辑放在其中

然后,只要在每个使用的控制器操作中初始化集合,就可以将其放在任何视图上

因此,在家庭控制器中,您仍然需要:

@posts = Post.find(:all)
至于你的第一个问题,试着通过
@posts=Post查找它们。查找(:all)

你应该做一个标记,并将Post逻辑放在其中

然后,只要在每个使用的控制器操作中初始化集合,就可以将其放在任何视图上

因此,在家庭控制器中,您仍然需要:

@posts = Post.find(:all)
至于您的第一个问题,请尝试通过
@posts=Post查找它们。查找(:all)

错误(您可能怀疑)发生在以下行:

<% @posts.each do |post| %>

不知怎的,@posts最终是零,尽管我们希望它成为一个列表

这有点奇怪,因为上面的代码看起来应该可以工作。我会尽力帮你找出这个问题

all相当于Post.find(:all),根据,它可能返回nil,但我不知道在实践中何时会发生这种情况。通常,如果数据库中没有POST,它应该返回一个空列表(
[]
),或者如果数据库表根本不存在,则引发异常

因此,为了防止Post.all以某种方式返回nil,请在控制器中尝试
@posts=[]
而不是
@posts=Post.all
。然后,
。每个
都应该工作

如果(如我所怀疑的)不是这样,我猜是不知何故,一个不同于您上面发布的控制器会被执行。然后,因为@posts从未设置过,尝试访问它只会得到nil,这就解释了错误。因此,请检查您的路径和类名,并确保您认为运行的代码实际运行

希望这能帮助您找出问题所在,并让我们知道是什么为您解决了问题

错误(您可能怀疑)发生在以下行:

<% @posts.each do |post| %>

不知怎的,@posts最终是零,尽管我们希望它成为一个列表

这有点奇怪,因为上面的代码看起来应该可以工作。我会尽力帮你找出这个问题

all相当于Post.find(:all),根据,它可能返回nil,但我不知道在实践中何时会发生这种情况。通常,如果数据库中没有POST,它应该返回一个空列表(
[]
),或者如果数据库表根本不存在,则引发异常

因此,为了防止Post.all以某种方式返回nil,请在控制器中尝试
@posts=[]
而不是
@posts=Post.all
。然后,
。每个
都应该工作

如果(如我所怀疑的)不是这样,我猜是不知何故,一个不同于您上面发布的控制器会被执行。然后,因为@posts从未设置过,尝试访问它只会得到nil,这就解释了错误。因此,请检查您的路径和类名,并确保您认为运行的代码实际运行


希望这能帮助您找出问题所在,并让我们知道是什么为您解决了问题

是的,我可以在/posts上看到它们,但我想在home/index.html.erb中显示一个全局变量类型。有这样一件事吗?你怎么能在看到帖子的同时得到零。每个错误?有些东西没有意义。我只在index.html.erb文件中得到nil.each错误,它实际上是根,但在/posts视图中我可以看到它们。但是我希望将它们列在home(root)中。是的,我可以在/posts上看到它们,但是我想在home/index.html.erb中显示一个全局变量类型。有这样一件事吗?你怎么能在看到帖子的同时得到零。每个错误?有些东西没有意义。我只在index.html.erb文件中得到nil.each错误,它实际上是根,但在/posts视图中我可以看到它们。但我想把它们列在家里(根)。