nesting comments resources in posts resources

122 views Asked by At

I'm doing the RoR tutorial on rubyonrails.org and have been doing fine up until adding comments to posts.

When I click through to 'show' a post, I get the following error:

ActionController::UrlGenerationError in Posts#show No route matches {:action=>"index", :controller=>"comments", :id=>"1", :format=>nil} missing required keys: [:post_id]

I have a show method for posts_controller.rb (see below), and, unless there's a typo on the rails guide (likely, since there are others in other spots), I think there's something going on with my routes.rb.

It says the error occurs around line 25 of /show.html.erb.

Title: <%= @post.title %>

<p>
  <strong>Text:</strong>
  <%= @post.text %>
</p>

<h2>Comments</h2>
<% @post.comments.each do |comment| %>
    <p>
      <strong>Commenter:</strong>
      <%= comment.commenter %>
    </p>

    <p>
      <strong>Comment:</strong>
      <%= comment.body %>
    </p>
<% end %>

<h2>Add a comment:</h2>
<%= form_for([:post, @post.comments.build]) do |f| %>
    <p>
      <%= f.label :commenter %><br />
      <%= f.text_field :commenter %>
    </p>
    <p>
      <%= f.label :body %><br />
      <%= f.text_area :body %>
    </p>
    <p>
      <%= f.submit %>
    </p>
<% end %>

<%= link_to 'Back', posts_path %>
<%= link_to 'Edit', edit_post_path(@post) %>

/posts_controller.rb

class PostsController < ApplicationController

  def new
    @post = Post.new
  end

  def index
    @post = Post.all
  end

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

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

    if @post.save

      redirect_to @post

    else
      render 'new' 
    end

    def edit
      @post = Post.find(params[:id])
    end
  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

routes.rb

Myapp::Application.routes.draw do

  resources :posts do  
    resources :comments
  end

  root "welcome#index"
end

I think the error has something to do with my routes.rb file, but I can't figure out exactly what. Am I nesting my routes for the comments incorrectly?

0

There are 0 answers