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