Determine type in polymorphic relation

I'm not sure of what you need to do but I'll assume that you just want
to create an association between a person and a vehicle of type car or
truck (or whatever).

I am assuming that you have STI built into your vehicles table, with a
column named 'type' that stores the type of vehicle
('Car'/'Truck'/'Whatever'). If you just want to assign a vehicle to
the person I don't see a reason why you should know the type of
vehicle it is.

Based on your code you know the id of the vehicle. Why not do
something simpler?:

person.car = Vehicle.find(params[:id])

You might not know the type of vehicle it is but does it matter?

And going even further, do you really need to retrieve the vehicle
row? I guess that if you can't trust the id beeing an honest value you
should but if you could trust it, couldn't you just do?:

person.vehicle_id = params[:id]

Maybe I am not understanding your need?

Heinz Strunk wrote:

First of all thank you guys! I think what Valentin wrote is just what I
was looking for. Person, Car, Truck was just an example. It's a lot more
complexe in my application and you can't just merge these two different
models into one and add a :type.

I'll do it like Valentin suggested. Thanks again! :slight_smile:

It should be noted that Valentin suggested a STI solution (which is what
I would have recommended) and your question resolved around polymorphic
associations which is a different concept entirely. Polymorphic
associations deal with association polymorphism where as STI deals
primarily wih model polymorphism.

hth

ilan