Nested Resourced, Books > Authors… Creatin g 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| %>
.
.
.

<%= 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

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:

...

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

thanks

On Sat, Oct 2, 2010 at 8:47 PM, nobosh [email protected] wrote:

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

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

expected

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

On Sat, Oct 2, 2010 at 9:10 PM, nobosh [email protected] wrote:

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:

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!