(这不是我正在使用的实际代码,虽然这总结了我想要做的事情)
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
我的问题是我想知道如何创建一个名为“network”的方法,这样返回的内容就不是数组。像这样,
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 :(得分: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
可能没有你想要的那么有用,但也许它会给你一些想法。