0

我有以下实体:

  • 用户
  • 公司
  • 组织

用户需要能够将用户、公司、组织和未来的聚会对象添加到他们的朋友列表中。

我最初的想法涉及使用与朋友具有多态关系的 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'。

非常感谢任何建议。

谢谢!

4

2 回答 2

0

不要使用 :through,在多态 has_many 关系中使用 :as=>friendable

于 2009-08-12T19:34:06.063 回答
0

看来 Rails 插件“has_many_polymorphs”允许我做我想做的事。

http://github.com/fauna/has_many_polymorphs/tree/master

将此行添加到我的 User 模型中给了我想要的功能:

has_many_polymorphs :friendables, :from => [:businesses, :organizations], :through => :friendships
于 2009-08-12T20:09:23.307 回答