When first trying to get an understanding of polymorphic associations in Rails, I was completely lost. At this point in my learning curve, polymorphic associations are a high-level concept in Rails which allows the programmer to reuse a single model to be useful for other models. It’s difficult to describe without an example. So… here we go.
An example of a polymorphic association is as follows. Let’s say you’re building a sports history database. Baseball players and basketball players are both athletes, but you want to be able to keep the baseballers separate from the basketballers. One way to do that is to create an Athletes model.
The Athlete model would be a way to tie the sports together.
Coding The Polymorphic Association
This requires a migration where we connect the athletes with the sports they play:
rails g migration AddSportToAthlete sport_id:integer sport_type:string
First we set the polymorphic association model:
class Athlete < ApplicationRecord
belongs_to :sport, polymorphic: true
end
Then we assign that association to the baseballers and the basketballers:
class Baseballer < ApplicationRecord
has_many :athletes, as: :sport
end
class Basketballer < ApplicationRecord
has_many :athletes, as: :sport
end