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!