user3349818
user3349818

Reputation: 23

Ruby getting started guide: uninitialized constant PostsController::Posts

I've done the ruby getting started guide a few times over and I always end up with the same result. Guids

NameError in PostsController#index
 uninitialized constant PostsController::Posts

Extracted source (around line #21):

19
20
21
22
23
24

def index
    @posts = Posts.all
end

def edit

Rails.root: C:/RailsTesting/blog

Application Trace | Framework Trace | Full Trace app/controllers/posts_controller.rb:21:in `index' Request

Out of frustration/desperation, I copied all of the files from the actual code supplied by the tutorial with no avail, please help.

Here's my index

<h1>Hello, Rails!</h1>
<%= link_to "My Blog", controller: "posts" %>

<%= link_to 'New post', new_post_path %>


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

<% @posts.each do |post| %>
<tr>
<td><%= post.title %></td>
<td><%= post.text %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post_path(post),
                method: :delete, data: { confirm: 'Are you sure?' } %>
</tr>
...

Here is my posts_controller

class PostsController < ApplicationController
def new
    @post = Post.new
end

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

    if @post.save
        redirect_to @post
    else
        render 'new'
    end
end

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

def index
    @posts = Posts.all
end

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

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

    if @post.update(params[:post].permit(:title, :text))
        redirect_to @post
    else
        render 'edit'
    end
end

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

    redirect_to posts_path
end

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

  end

Upvotes: 2

Views: 1697

Answers (2)

Ganesh Kunwar
Ganesh Kunwar

Reputation: 2653

Modify your index action as:

def index
  @posts = Post.all
end

Here Post is the model from where you are get all posts.

Upvotes: 0

Niels B.
Niels B.

Reputation: 6310

Your index method has the Post class written in plural. Change it to Post.all

Upvotes: 5

Related Questions