nobosh
October 2, 2010, 8:49pm
1
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
nobosh
October 2, 2010, 9:11pm
2
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
nobosh
October 2, 2010, 10:59pm
3
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
nobosh
October 2, 2010, 11:02pm
4
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:
nobosh
October 2, 2010, 11:39pm
5
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