为什么我收到这个NoMethodError?

时间:2013-10-02 07:45:00

标签: ruby-on-rails

我正在使用Ruby on Rails教程创建博客,当我在localhost:3000地址中调出页面时收到此错误:

'未定义的方法`每个'为nil:NilClass'

我的控制器:

class PostsController < ApplicationController

def new
end

def create
  @post = Post.new(params[:post].permit(:title, :text))

  @post.save
  redirect_to @post
end

def show
  @post = Post.find(params[:id])
end

private

def post_params
  params.require(:post).permit(:title, :text)
 end

def index
  @posts = Post.all 
end
end

我的查看文件:

<h1>Listing posts</h1>


    <table>
      <tr>
        <th>Title</th>
        <th>Text</th>
      </tr>

      <% @posts.each do |post| %>
        <tr>
          <td><%= post.title %></td>
          <td><%= post.text %></td>
        </tr>
      <% end %>
    </table>

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

您应该将 index 操作从私有部分移开。

答案 1 :(得分:1)

由于您的PostsController#index方法是私有的,因此当您输入/posts时,其代码无法运行,因此@posts实例变量仍为nil

将其移至公开栏目:

class PostsController < ApplicationController

  def index
    @posts = Post.all 
  end

  def new
  end

  def create
    @post = Post.new(params[:post].permit(:title, :text))

    @post.save
    redirect_to @post
  end

  def show
    @post = Post.find(params[:id])
  end

  private

    def post_params
      params.require(:post).permit(:title, :text)
    end
end