Nested Resourced, Books > Authors… Creating Records for Authors…

Hello,

I have the following Rails3 nested resource in my routes.rb:

    resources :books do       resources :authors     end

My authors table has ID | name | book_id

Given I'm at the URL /books/312/authors/new

I'm having problems getting a new author created for the book....

Here's my authors controller code:

def create   @books = Book.find(params[:book_id])   @author = @book.authors.create(params[:note]) . . . end

My NEW FORM (which I think is the problem, looks like this:

<%=form_for [@book , @author] do |f| %> . . .

  <div class="actions">     <%= f.submit %>   </div> <% end %>

When I submit I get the ERROR: "Couldn't find Book without an ID" And the URL changes to "/books/ & NOT /books/312/authors ... as expected

Suggestions? Thank you

Updated the author controller with:

  def new     @note = Author.new     @book = Book.find(params[:book_id]) . . end

Now the form is creating what seems like the right URL: <form accept-charset="UTF-8" action="/books/3/authors" class="new_author" id="new_author" method="post"> ...

But after submitting a new author, it errors with (after hanging for a while locally): SQLite3::BusyException: database is locked: INSERT INTO "authors" .........

thanks

Hello,

I have the following Rails3 nested resource in my routes.rb:

resources :books do

  resources :authors

end

My authors table has ID | name | book_id

Given I’m at the URL /books/312/authors/new

I’m having problems getting a new author created for the book…

Here’s my authors controller code:

def create

    @books = Book.find(params[:book_id])

    @author = @book.authors.create(params[:note])   

. this should look like this

def create

    @books = Book.find(params[:book_id])

    @author = @book.authors.build(params[:author])
    if @autho.save
   blah blah ....

what you have makes no sense

.

.

end

My NEW FORM (which I think is the problem, looks like this:

<%=form_for [@book , @author] do |f| %>

.

.

. for this to work in the new action in the controller you must have created @book and @author like this

def new

@book = Book…find(params[:book_id]) @author = @book.authors.new

if you dont then this [@book , @author] gets book as nil

<%= f.submit %>

<% end %>

When I submit I get the ERROR:

“Couldn’t find Book without an ID”

And the URL changes to "/books/ & NOT /books/312/authors … as

expected

post what you do after save, it appears something is wrong in the render :action => :new section of the create action

Updated the author controller with:

def new

@note = Author.new

What is this? what is note? makes no sense

Now the form is creating what seems like the right URL:

<form accept-charset="UTF-8" action="/books/3/authors"

class=“new_author” id=“new_author” method=“post”>

the action path is not rigth

Thanks radhames - that did the trick!

I now have a view here: /books/131/authors/ And I want to each record to link to something like: /books/131/ authors/3333

    <% @authors.each do |author| %>        <%= link_to 'author.name', book_author_path(@book, @author) %>     <% end %>

but that error's with: No route matches {:action=>"destroy", :controller=>"authors"}

I also tried:

    <%= link_to 'author.name', [@book, author] %>

Problem is the code keeps linking to /authors/3333, not /books/131/ authors/3333

use polymorphic_path()

or

[@book, @author]

got it - thanks!