2011-11-22 97 views
3

我有以下几点:连接两个活动记录结果(通过连接表)返回一个新的结果

Account --> Options 
Account --> Profiles --> Options 

下面是模型

# models/account.rb 
class Account < ActiveRecord::Base 
    has_many :accounts_has_options 
    has_many :options, :through => :accounts_has_options 
    has_many :accounts_has_profiles 
    has_many :profiles, :through => :accounts_has_profiles 
end 

# models/profile.rb 
class Profile < ActiveRecord::Base 
    has_many :profiles_has_options 
    has_many :options, :through => :profiles_has_options 
    has_many :accounts_has_options 
    has_many :accounts, :through => :account_has_options 
end 

# models/option.rb 
class Option < ActiveRecord::Base 
    has_many :accounts_has_options 
    has_many :accounts, :through => :accounts_has_options 
    has_many :profiles_has_options 
    has_many :profiles, :through => :profiles_has_options 
end 

我想有相关联的所有选项一个帐户和通过配置文件关联的所有选项,可能是一个虚拟属性。

我找到了一个例子,这个问题: How do you concatenate two active record results to return a new result that can further be filtered? 但他们只有两个型号有关,在我的情况下,我们的故事连接表。

任何想法,如何写这样的虚拟属性?

+0

您是否尝试过这个问题表明了什么?我不明白为什么它不起作用。 – muffinista

回答

0

如何将这样的方法给您的客户模型

def all_options 
    profile_option_ids = [] 
    self.profiles.map{|p| profile_option_ids = profile_option_ids + p.options.pluck("options.id")} 
    Option.where("id IN (?) or id IN (?)", self.options, profile_option_ids) 
end 

所以,你只需要调用

account.all_options 
相关问题