我有以下实体:
用户需要能够将用户,公司,组织和未来派对对象添加到他们的朋友列表中。
我最初的想法涉及使用具有与朋友的多态关系的友谊对象,如下所示:
简化友谊架构:
User - has_many :businesses, :through => :friendships, :conditions => ['friendable_type=?', 'Business'], :source => :friendable
我的问题是Ruby on Rails ActiveRecord不支持has_many通过连接表上的多态关系来实现关系。
最后,我希望有一个连接表能够迭代以获得所有类型,某些类型等的朋友列表,如下所示:
john = User.find(5) john.friendships.map {|friendship| friendship.friendable } john.businesses (has_many :through scoped to only the businesses) john.organizations (has_many :through scoped only to the organizations)
我考虑过让用户,业务和组织从一个通用的Party类继承并使关联指向基类Party类,但是在ORM的上下文中导致一堆垃圾字段而且它只是好像很脏。
我想知道的是其他人如何处理这样的情况,你想通过使用ActiveRecord的公共连接表创建与类似对象的一对多关系,同时避免这个错误::))
Cannot have a has_many :through association 'User#businesses' on the polymorphic object 'Friendship#friendable'.
任何建议都非常感谢。
谢谢!
答案 0 :(得分:0)
不要使用:通过,使用:as =>友好而不是多态的has_many关系
答案 1 :(得分:0)
似乎Rails插件'has_many_polymorphs'允许我完全按照自己的意愿行事。
http://github.com/fauna/has_many_polymorphs/tree/master
将此行添加到我的用户模型中,为我提供了我想要的功能:
has_many_polymorphs :friendables, :from => [:businesses, :organizations], :through => :friendships