Forum: Ruby on Rails Nester Resources, Routes and Class Inheritance

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ae993d5cbc25d61aa3a10fc08eaea11b?d=identicon&s=25 sw0rdfish (Guest)
on 2008-11-04 16:46
(Received via mailing list)
Ok here's a quicky... but a goody :)

We have models Company, Reference and Applicant... and References and
Applicants just inherit from Company, and are basically companies with
the type field set to reference...

All companies can have a phone number associated with them, and phone
number is a different model...

I'm having trouble using the form_for method with a company that
happens to be an Applicant...

form_for( [ @company, @phone_number] )

tries to use the route applicant_phone_number however the only route
that exists is company_phone_number, which is the one I want to use...

I tried to create a route by creating a
map.resource :applicants, :has_many => phone_numbers

but there is no resource for Reference or Applicant only models, and
thus it breaks down... I get errors.

Any ideas on the correct way to make this work?
8217faf2bfdfa7daf10135d41ddd421e?d=identicon&s=25 Jeff Cohen (jeff)
on 2008-11-04 21:34
(Received via mailing list)
On Nov 4, 9:46 am, sw0rdfish <san...@gmail.com> wrote:
> happens to be an Applicant...
>
> form_for( [ @company, @phone_number] )
>
> tries to use the route applicant_phone_number however the only route
> that exists is company_phone_number, which is the one I want to use...

Yup, using an array in form_for doesn't work in STI situations like
you've got.

You'll have to do something like:

form_for :company_phone_number_path(@company, @phone_number)

Jeff

www.purpleworkshops.com
Ae993d5cbc25d61aa3a10fc08eaea11b?d=identicon&s=25 sw0rdfish (Guest)
on 2008-11-04 22:10
(Received via mailing list)
Ok so I tried your way, and I got an error;

compile error
syntax error, unexpected '(', expecting kEND
_erbout = '';  form_for :company_phone_number_path( [@company,
@phone_number] )  do |f| ; _erbout.concat "\n"

So I did a little digging to see the syntax for it, and I came up with

<% form_for( [:company, @trade_item] )  do |f| %>

which seems to do the trick!

Quick Q, what does STI stand for, and what's the proper syntax for
your "version" ?
8217faf2bfdfa7daf10135d41ddd421e?d=identicon&s=25 Jeff Cohen (jeff)
on 2008-11-04 23:33
(Received via mailing list)
On Nov 4, 3:09 pm, sw0rdfish <san...@gmail.com> wrote:
>
> which seems to do the trick!

Interesting!  I should have known that: by using the symbol, instead
of an @ variable, it just uses the name 'company' instead of trying to
inspect the @company class name.

> Quick Q, what does STI stand for, and what's the proper syntax for
> your "version" ?

Sorry: STI = "Single Table Inheritance", the Rails term for using the
"type" column in your table to help Rails figure out the right
subclass for the object corresponding to that row in the table.

I think you're getting the syntax error because you're still using the
array form [@company, @phone].  I just use

company_phone_path(@company, @phone)

where @company and @phone are just passed as regular arguments.

Jeff
This topic is locked and can not be replied to.