Rails - 类的继承层次结构,其中子类型可以扮演两个角色

时间:2010-05-23 14:47:34

标签: ruby-on-rails ruby

我需要在应用程序中为Owners和Rentee建模,因此您拥有的东西总是由某人拥有,可以为其他人租用。我首先使用单表继承来解决这个问题,因为两种类型的人都将共享所有属性,因此您将拥有一个名为Person的模型,该模型与拥有从继承自Person的所有者和Rentee的人相关联。

问题是单一类型继承使用字段类型识别子类型,因此表中的记录可以表示所有者或Rentee,但不能同时表示两者,而在实际上下文中,您可以拥有一个所有者是从另一个所有者租用的东西,因此该人同时是所有者和受让人。

你会如何解决这个问题?你会为业主和受让人使用分隔表吗? Rails中还有其他类型的表继承吗?

1 个答案:

答案 0 :(得分:1)

我建议你保持简单。你有人可以租用和拥有物品 - 同样的人,同样的物品 - 只需添加一种方法来追踪谁拥有和物品以及谁租用它。

你可以这样做:

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