我有以下实体:
- 用户
- 公司
- 组织
用户需要能够将用户、公司、组织和未来的聚会对象添加到他们的朋友列表中。
我最初的想法涉及使用与朋友具有多态关系的 Friendship 对象,如下所示:
简化的友谊模式:
- 用户身份
- 友好的_id
- 友好型
用户 - has_many :businesses, :through => :friendships, :conditions => ['friendable_type=?', 'Business'], :source => :friendable
我的问题是 Ruby on Rails ActiveRecord 不支持 has_many 通过连接表上的多态关系等的关系。
最后,我希望有一个单一的连接表能够遍历以获得所有类型、某些类型等的朋友列表,如下所示:
约翰 = User.find(5) john.friendships.map {|友谊| 友谊.Friendable } john.businesses (has_many :through 范围仅限于企业) john.organizations (has_many :through 仅适用于组织)
我考虑过让 User、Business 和 Organization 从通用 Party 类继承,并使关联指向基 Party 类,但在 ORM 的上下文中会导致一堆垃圾字段,而且看起来很脏。
我想知道的是其他人将如何处理这样的情况,您希望通过使用 ActiveRecord 的公共连接表创建与相似对象的一对多关系,同时避免此错误::)
不能有一个has_many:通过多态对象'Friendship#friendable'上的关联'User#businesses'。
非常感谢任何建议。
谢谢!