11

我正在按照此处找到的教程进行操作。这很简单,我完全按照步骤 6.7 的说明进行操作。在这一点上,我得到了错误

undefined method `each' for nil:NilClass 

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

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

具体来说,问题在于线路

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

它基本上声称那@posts是零。

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

index.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 %>

post_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
4

1 回答 1

11

为了views在 Rails 中正常工作,它们必须位于正确的目录中。这是Rails 喜欢的所谓“约定优于配置”的众多实现之一。

因此,如果您有一个方法index并且该方法位于名为 的控制器内PostsController,则您必须index在目录内有一个名为的视图views/posts/。这样一来,Rails 就会知道在处理对这个方法的 get 时它必须渲染这个视图。

关于一个好的教程,我会推荐这个。它很广泛,涵盖了很多不只是与 Rails 本身相关的东西,比如在 Heroku 上部署和一点 CSS。

于 2012-10-22T17:21:45.957 回答