Подтвердить что ты не робот

Rails undefined метод `each 'для nil: NilClass

Я следую учебнику, найденному здесь. Это просто, и я выполнил инструкции точно до шага 6.7. На этом этапе я получаю сообщение об ошибке

undefined method `each' for nil:NilClass 

когда я пытаюсь получить доступ к index.html.erb на сервере rails.

Я знаю, что база данных работает нормально, потому что я могу сделать все, упомянутое в шаге 6.3, создавать новые сообщения и показывать/редактировать/уничтожать их без проблем.

В частности, проблема связана с линией

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

и, по существу, утверждая, что @posts равно nil.

Я ценю любую помощь для этого новичка 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
4b9b3361

Ответ 1

Чтобы views работал нормально в Rails, они должны находиться внутри правильного каталога. Это одна из многих реализаций так называемой " Конвенция по конфигурации", которую любит Rails.

Итак, если у вас есть метод index, и этот метод находится внутри контроллера с именем PostsController, вы должны иметь представление с именем index внутри каталога views/posts/. Таким образом, Rails будет знать, что он должен отображать это представление при обработке этого метода.

О хорошем учебнике, я бы рекомендовал этот один. Он расширен и охватывает множество вещей, которые не только связаны с самими Rails, такими как развертывание на Heroku и немного CSS.