views:

234

answers:

1

I am trying to make a link to create a new nested resource in my Rails 3 application, but I can't figure it out. What is the syntax to link to a new nested resource

Solution:

Make sure you have your resources properly nested in your routes file.

resources :books do
  resources :chapters
end

Then in your view script you can call it like this:

<%= link_to 'New Chapter', new_book_chapter_path(@book) %>

The Rails Guide on Routing was quite helpful.

Note: if you get a message like Couldn't find Book without an ID, the problem isn't the link, it's the code in your controller.

def new
  @book = Book.find(params[:book_id]) #instead of :id
  @chapter = @book.chapter.new
  respond_with(@chapter)
end
A: 

make changes in routes as

map.resources :books do |book|
    book.resources :chapters
end

and then use this

link_to new_book_chapter_path(@book)

You can also use this link to understand the concept better Nested Routes

Rohit
You can skip block arguments, i.e. `|map|` and `|book|`.
Semyon Perepelitsa
Thanks. I realized that I was doing it right, but my bug was in a different area of my code.
Andrew