Rails 未定义方法 `each' for nil:NilClass

2024-01-08

我正在按照教程找到here http://guides.rubyonrails.org/getting_started.html。这很简单,我已完全按照步骤 6.7 进行操作。此时,我收到错误

undefined method `each' for nil:NilClass 

当我尝试访问 Rails 服务器上的 index.html.erb 时。

我知道数据库工作正常,因为我可以执行步骤 6.3 中提到的所有操作、创建新帖子并显示/编辑/销毁它们,绝对没有问题。

具体来说,问题在于该行

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

它本质上是在声称@posts is nil.

我感谢对这个 ROR 新手的任何帮助!谢谢。

索引.html.erb

<h1>Hello, Rails!</h1>
<table>
  <tr>
    <th>Name</th>
    <th>Title</th>
    <th>Content</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @posts.each do |post| %>
  <tr>
    <td><%= post.name %></td>
    <td><%= post.title %></td>
    <td><%= post.content %></td>
    <td><%= link_to 'Show', post %></td>
    <td><%= link_to 'Edit', edit_post_path(post) %></td>
    <td><%= link_to 'Destroy', post, :confirm => 'Are you sure?',
                                     :method => :delete %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to "My Blog", posts_path %>

posts_controller.rb

class PostsController < ApplicationController
  # GET /posts
  # GET /posts.json
  def index
    @posts = Post.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @posts }
    end
  end

为了views为了在 Rails 中正常工作,它们必须位于正确的目录中。这是所谓的“约定优于配置 http://en.wikipedia.org/wiki/Convention_over_configuration“Rails 喜欢的。

所以,如果你有一个方法index这个方法位于名为的控制器内部PostsController,您必须有一个名为index目录内views/posts/。这样,当处理此方法的 get 时,Rails 就会知道它必须渲染此视图。

关于一个好的教程,我会推荐这个one http://ruby.railstutorial.org/ruby-on-rails-tutorial-book。它内容广泛,涵盖了许多不仅仅与 Rails 本身相关的内容,例如在 Heroku 上部署和一些 CSS。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 未定义方法 `each' for nil:NilClass 的相关文章

随机推荐