Forum: Ruby on Rails How to reference parent object when using sub-resources

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
POOCH (Guest)
on 2009-01-06 16:20
(Received via mailing list)

I'm building my first Rails application and have hit a problem using

My model includes a Deposit that has_many Payments.  So routes.rb has
a line:

       map.resources :deposits, :has_many => :payments

I've generated the scaffolding for Payments and I am able to go from a
particular Deposit to a page where I want to show its list of
Payments.  The index.html.erb for Payments begins with these 2 lines:

     <h2>Payments for deposit <%= @deposit.deposit_date %> : <%= %></h2>

     <%= link_to 'Add a payment', new_payment_path(@deposit) %>

The references to @deposit in the first line are resolved correctly,
but not so on the second line.  When trying to render the index, the
error messages I get are:

     NoMethodError in Payments#index
     You have a nil object when you didn't expect it!
     The error occurred while evaluating nil.to_sym

This at first made me think that @deposit was nil when the second line
was parsed, but now I think that the first error line is more to the
point -- there isn't a new_payment_path method that takes a Deposit as
a parameter.  But I need to pass in the parent Deposit on the page
where I will be creating a child Payment, so how can I do that?

When I remove the @deposit parameter from new_payment_path, the page
renders fine, but when I click the Add a Payment link, the page it
goes to is http://localhost:3000/payments/new , with no reference to
the parent Deposit.

So how do I pass in the parent when creating the child?

POOCH (Guest)
on 2009-01-06 16:41
(Received via mailing list)
Nevermind -- I've found the answer.  The link_to should be coded as:

     <%= link_to 'Add a payment', new_deposit_payment_path(@deposit)

For me, magic is often hard to follow.
This topic is locked and can not be replied to.