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

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
4

1 に答える 1

11

Rails で が正常に動作するためにはviews、正しいディレクトリ内にある必要があります。これは、Rails が好むいわゆる「設定より規約」の多くの実装の 1 つです。

したがって、メソッドindexがあり、このメソッドが という名前のコントローラー内にある場合、ディレクトリ内にPostsControllerという名前のビューが必要です。このようにして、Rails は、このメソッドへの get が処理されたときに、このビューをレンダリングする必要があることを認識します。indexviews/posts/

良いチュートリアルについては、これをお勧めします。それは広範であり、Heroku へのデプロイや小さな CSS など、Rails 自体に関連するだけでなく、多くのことをカバーしています。

于 2012-10-22T17:21:45.957 に答える