Rails - иерархия наследования классов, где подтип может играть две роли - PullRequest
0 голосов
/ 23 мая 2010

Мне нужно смоделировать владельцев и арендаторов в приложении, чтобы у вас были вещи, которые всегда принадлежат кому-то и могут быть арендованы для кого-то другого. Сначала я подошел к этой проблеме с наследованием отдельных таблиц, потому что оба типа людей будут совместно использовать все атрибуты, поэтому у вас будет модель с именем Person, связанная с таблицей людей, у которых владелец и арендованный наследуют от Person.

Проблема заключается в том, что наследование одного типа распознает подтипы с использованием типа поля, и поэтому запись в таблице может представлять как владельца, так и рента, но не оба одновременно, тогда как в реальном контексте вы можете иметь владельца, который арендует что-то у другого Владельца, и, следовательно, это лицо одновременно является Владельцем и Рентой.

Как бы вы подошли к этой проблеме? Будете ли вы использовать отдельные таблицы для владельцев и арендаторов? Есть ли другой тип наследования таблиц в Rails?

1 Ответ

1 голос
/ 23 мая 2010

Я бы посоветовал вам сделать это проще.У вас есть люди, которые могут арендовать и владеть предметами - те же люди, те же предметы - просто добавьте способ отслеживать, кто владеет предметом и кто арендовал его.

Вы можете сделать что-то вроде этого:

class Person
  has_many :items
  has_many :rented_items, :class_name => "Item", :foreign_key => "rentee_id"
end

class Item
  belongs_to :person
  belongs_to :rentee, :class_name => "Person", :foreign_key => "rentee_id"
end

# so you have:
person.items # all the items a person owns
person.rented_items # all the items he has rented
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...