If had had the models Store, Product, User and Price with the following associations
class User < ActiveRecord::Base
has_many :products
has_many :stores
has_many :prices
end
class Store < ActiveRecord::Base
belongs_to :user
has_many :prices
end
class Product < ActiveRecord::Base
belongs_to :user
has_many :prices
end
class Price < ActiveRecord::Base
belongs_to :user
belongs_to :product
belongs_to :store
end
class Estate < ActiveRecord::Base
belongs_to :user
end
And want to create a Option model that holds the models specific option type with things like, if an Estate has a backyard, swimming pool, tennis court or a price has a deal, discount or buy one get one free. Would this be done by a polymorphic association?
I’m doing this so I don’t have to create a Option model for each model and can just have one model for all new options I want to add. So is this the correct way to go about this?
If you use a polymorphic option model, then the fields would be the same for each class/record an object belongs to. I don’t think this is what you want since a deal doesn’t have a swimming pool and an estate isn’t buy-one-get-one (I wish!).
I would look into using Rails 3.2 and the ActiveRecord::Store feature. With this, just add a single text column to your model(s) (call it “options”) and then you can define all the options you need.