2010-11-19 67 views
3

(这不是我用实际的代码,虽然这总结了什么,我想要做的想法)(Rails的问题)合并多个多态性的has_many关系

class Connection < ActiveRecord::Base 
    belongs_to :connection1, :polymorphic => true 
    belongs_to :connection2, :polymorphic => true 
end 

class User < ActiveRecord::Base 
    has_many :followers, :class_name => 'Connection', :as => :connection1 
    has_many :followings, :class_name => 'Connection', :as => :connection2 
end 

我的问题是,我想了解我将如何创建一个名为“网络”的方法,以便返回的内容不是数组。像这样,

u = User.first 
u.network # this will return a merged version of :followings and :followers 

所以,我还是可以做到这一点:

u.network.find_by_last_name("James") 

ETA:

或者嗯,我想我的问题其实归结到是否有可能创建一个合并2个has_many关联的方法,这样我仍然可以调用它的find_by方法。

+0

这是什么语言? – 2010-11-19 08:26:15

+0

哎呀,对不起。这是针对Ruby on Rails的。 – odina 2010-11-19 08:28:08

+0

你能否提供表格结构? 。我对这个问题不是很清楚......你在寻找一个自我加入吗? – Rakesh 2010-11-19 10:09:57

回答

0

您确定需要Connections的集合,而不是用户集合吗?

如果它是您需要的Connections集合,那么好像在Connection(或范围,如果您喜欢这样的事情)上可以很好地使用类方法。

connection.rb

class Connection < ActiveRecord::Base 
    class << self 
    def associated_with_model_id(model, model_id) 
     include([:connection1, :connection2]). 
     where("(connection1_type IS #{model} AND connection1_id IS #{model_id}) 
      OR (connection2_type IS #{model} AND connection2_id IS #{model_id})") 
    end 
    end 
end 

user.rb

class User < ActiveRecord::Base 
    def network 
    Connection.associated_with_model_id(self.class.to_s, id) 
    end 
end 

大概不会有用,因为你想,但也许会给你一些想法。