I think I understand that only belongs_to association can be polymorphic. The model that carries belongs_to gets the foreign key and :polymorphic => true.
But I want to model the following:
A User "has_one" vehicle, which can be either a "Car" or a "Truck", but not both (this is a requirement). My natural inclination is toward declaring it thus:
class User < ActiveRecord::Base has_one :vehicle end
class Vehicle < ActiveRecord::Base belongs_to :user end
class Car < Vehicle attr_accessible :capacity # no. of passengers it can carry end
class Truck < Vehicle attr_accessible :horse_power # 150, 200, 250 ... end
My goal is to be able to have foreign key in the :cars and :trucks tables in the form of user_id and have no :vehicles table. I of course want the association methods to work the way they do in class has_one -- belongs_to combo, i.e. I should be able to do @user.vehicle to mean either nil or car or truck that user owns, @car.user to be the user owning that car etc.
I think these expectations are wrong. For instance, since I declared Vehicle to be an AR model, I need to have :vehicles table. Period. But when I am modeling the abstractions, I don't need any persistence for (abstract) Vehicle. I just need to persist either a car or a truck for a user. Thus, :users table just contains the info relevant to the user whereas the :cars and :trucks table contains car- and truck-relevant info along with a user_id foreign key.
Another problem I see with my expectations is that both Car and Truck must declare belongs_to :user. Period. I am willing to do that, but my expectation is that since Car is a Vehicle, the belongs_to association should be inherited by the Car.
Can someone please help me see things more clearly and work around the issues so that I can capture my relationship succinctly?
Best Regards, Kedar