Polymorphic relations
Polymorphic means multiple forms or multiple behaviors. For example, a vehicle could mean a two-wheeler, three-wheeler, a car, a truck, or even a space shuttle! So, how do we map these different types of vehicles that have entirely different data but have a relatively common functionality? Enter polymorphic relations! Let's create vehicles using basic polymorphism.
Let's design the Vehicle
model:
# app/models/vehicle.rb class Vehicle include Mongoid::Document belongs_to :resource, polymorphic: true field :terrain, type: String field :cost, type: Float field :weight, type: Float field :max_speed, type: Float end
This is the main polymorphic class. We now use this class in other models. Now, each model we build is independent and can choose to be related to Vehicle
. It has its own identity and does not inherit from any parent model, but it will be treated like a vehicle.
Let's create a Bike
class:
# app/models/bike.rb class Bike include Mongoid::Document ...