Forum: Ruby on Rails noob question on associated records and their controller structure

Posted by Grary (Guest)
on 2010-03-09 02:03
(Received via mailing list)
Hi,

I have controllers for two models between which there exists a
belongs_to/has_one relationship.

How do I reference the parent model object in the child controller so
that I can later recover the child object in the parent controller,
i.e., create and "attach" the child to the parent model for later
recovery?

I would have guessed it was something like as follows:

class ChildController...

  def create
    @parent = ParentModel.find(params[:id]) # How to get "current"
parent from database?
    @parent.child = ChildModel.new(params[:child])
  ...

Any thoughts?

Grary
Posted by Marnen Laibow-Koser (marnen)
on 2010-03-09 18:51
Grary wrote:
> Hi,
> 
> I have controllers for two models between which there exists a
> belongs_to/has_one relationship.
> 
> How do I reference the parent model object in the child controller so
> that I can later recover the child object in the parent controller,
> i.e., create and "attach" the child to the parent model for later
> recovery?

If you have your associations set up properly, this is automatic.

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
marnen@marnen.org
Posted by Marnen Laibow-Koser (marnen)
on 2010-03-09 18:53
Grary wrote:
> Hi,
> 
> I have controllers for two models between which there exists a
> belongs_to/has_one relationship.
> 
> How do I reference the parent model object in the child controller so
> that I can later recover the child object in the parent controller,
> i.e., create and "attach" the child to the parent model for later
> recovery?
> 
> I would have guessed it was something like as follows:
> 
> class ChildController...
> 
>   def create
>     @parent = ParentModel.find(params[:id]) # How to get "current"
> parent from database?

Don't bother finding the parent model if you already have the ID. 
That's an extra query for no reason in most cases.

>     @parent.child = ChildModel.new(params[:child])

Oh, on second reading, I see what you're asking.  Check out nested 
resources and accepts_nested_attributes_for.  Also read the Rails guide 
on associations if you haven't already.

>   ...
> 
> Any thoughts?

Yes, try it before you ask! :)  Rails makes this simple.

> 
> Grary

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
marnen@marnen.org
Posted by Jeremy Chase (Guest)
on 2010-03-09 18:55
(Received via mailing list)
You should just be able to do child.parent

--
Jeremy Chase
http://twitter.com/jeremychase



On Tue, Mar 9, 2010 at 12:51 PM, Marnen Laibow-Koser
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.