Rails ActiveRecord ассоциация "один или другой" - PullRequest
1 голос
/ 09 октября 2010

Мне было интересно, как в Rails может быть сделана ассоциация, подобная следующей:

class Car < ActiveRecord::Base
    belongs_to :person
end

class Truck < ActiveRecord::Base
    belongs_to :person
end

class Person < ActiveRecord::Base
    #How to do the association as below?
    has_one :car or :truck
end

По сути, я пытаюсь добиться, чтобы Person мог иметь один Car или один Truck, но не может иметь оба.

В качестве вторичного решения, есть ли решение, в котором Person может иметь много Car или много Truck, а не сочетание обоих?

Есть идеи, как это сделать?

1 Ответ

3 голосов
/ 09 октября 2010

Хорошее время для Наследование одной таблицы

class Vehicle < ActiveRecord::Base
    belongs_to :person
end

class Car < Vehicle
  # car-specific methods go here
end

class Truck < Vehicle
  # truck-specific methods go here
end

class Person < ActiveRecord::Base
    has_one :vehicle
end

person = Person.new
person.vehicle = Car.new # (or Truck.new)

Вторая часть вопроса сложнее. Одним из подходов является использование наследования и для личности:

class Person < ActiveRecord::Base
    has_many :vehicles
end

class TruckDriver < Person
  def build_vehicle(params)
    self.vehicles << Truck.new(params)
  end
end

class CarDriver < Person
  def build_vehicle(params)
    self.vehicles << Car.new(params)
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...