Это может не полностью ответить на ваш вопрос, но если у вас будет только две роли для судов на воздушной подушке, я бы вместо этого установил ассоциации, подобные этой
class Hovercraft < ActiveRecord::Base
belongs_to :pilot, :class_name => 'Ninja', :foreign_key => 'pilot_id'
belongs_to :copilot, :class_name => 'Ninja', :foreign_key => 'copilot_id'
end
class Ninja < ActiveRecord::Base
has_many :pilotings, :class_name => 'Hovercraft', :foreign_key => 'pilot_id'
has_many :copilotings, :class_name => 'Hovercraft', :foreign_key => 'copilot_id'
end
Теперь, если у вас больше ролей или если вам нужно больше гибкости, вы можете использовать третью модель, чтобы связать их вместе.
class Hovercraft < ActiveRecord::Base
has_many :hovercraft_roles
has_many :ninjas, :through => :hovercraft_roles
end
class HovercraftRole < ActiveRecord::Base
belongs_to :hovercraft
belongs_to :ninja
end
class Ninja < ActiveRecord::Base
has_many :hovercraft_roles
has_many :hovercrafts, :through => :hovercraft_roles
end
С атрибутом роли в HovercraftRole
модели для указания, является ли он «пилотом» или «вторым пилотом».