Rails带有类型的模型如何建模?

时间:2012-05-30 12:40:15

标签: database ruby-on-rails-3 activerecord

我有两个型号

商业和代表

当企业或代表报名时,会显示“您是如何了解我们的?”选项列表。

发现方式是动态的,因此管理员可以添加业务或代表发现我们的方式。例如,管理员可以添加“通过Google”,“通过朋友”,“通过其他代表”等选项。每种发现类型可以是商家或代表,也可以是两者。

我应该如何对discovery_type模型进行建模,它应该具有什么样的关系,我正在考虑以下几个方面的内容

Schema : 
table: discovery_types
name: string
type: string(can be one of 'business','representative', 'both')

class DiscoveryType< ActiveRecord::Base
  has_many :businesses
  has_many :representatives
end

class Business< ActiveRecord::Base
  belongs_to :discovery_type
end

class Representative< ActiveRecord::Base
  belongs_to :discovery_type
end

我对上述方案毫无信心。所以任何人都可以指出任何问题,并可能建议一个更好的出路..

我还应该在任何列上添加索引吗?

1 个答案:

答案 0 :(得分:1)

编辑:不是多态协会,你是对的 - 这是相反的关系。

这适用于你想要的关系 -

class DiscoveryType< ActiveRecord::Base
  has_many :discoveries
end

class Discovery < ActiveRecord::Base
  belongs_to :discovery_type
end

class Business < Discovery
end

class Representative < Discovery
end

如果您将type列留在discovery_types,Rails应自动使用