我有过
data_records、品牌和影响力
data_records有很多品牌data_records只有一个有影响力的人
品牌通过brand_influencers关联拥有许多有影响力的人,该关联有一个名为top (布尔值)的属性。
以下是我的模型:
class DataRecord < ActiveRecord::Base
belongs_to :influencer
has_and_belongs_to_many :brands
end
class Brand < ActiveRecord::Base
has_and_belongs_to_many :data_records
end
class Influencer < ActiveRecord::Base
has_many :brands_influencers
has_many :brands, :through => :brands_influencers
end
class BrandsInfluencer < ActiveRecord::Base
belongs_to :brand
belongs_to :influencer
end我想做一个查询,以获得给定品牌的所有影响者( data_records = true),其中有影响力的人在这些品牌中。
我需要从data_record模型开始,因为还有其他动态查询可以连接到这个查询上(这是一个典型的大过滤器类型的屏幕)。
所以我的问题是,有没有可能加入一个关系中的连接。我使用过joins品牌,它工作得很好,但我想不出一种方法来加入brand_influencers关系
谢谢,乔尔
发布于 2012-03-30 20:57:41
它的rails 2.3.5版本是
DataRecord.find :all, :conditions => ['brands.name = ? AND influencers.top = ?', 'name', true], :joins => {:brands => :influencers}我假设一个品牌有一个名字,而你是通过名字来寻找这个品牌的。您需要像这样更改Brand:
class Brand < ActiveRecord::Base
has_and_belongs_to_many :data_records
has_and_belongs_to_many :influencers
end发布于 2011-06-08 20:42:14
听起来你想用
has_many :foos, :through=>:bar或
has_one :foo, :through=>:bar试试这个:
class DataRecord < ActiveRecord::Base
# how does this relate to the other models?
end
class Brand < ActiveRecord::Base
has_and_belongs_to_many :influencers
end
class Influencer < ActiveRecord::Base
has_and_belongs_to_many :brands
end
class BrandsInfluencers < ActiveRecord::Base
# notice the name change in this class (pluralization)
belongs_to :brand
belongs_to :influencer
end发布于 2012-03-27 07:12:51
您可以从另一个join获取并在where中引用它们,如下所示:
DataRecord.joins(:influencers => {:brand_influencers}, :brands).
where(:brands => {:id => 123}).
where(:brands => {:brand_influencers => {:top => true}})我非常确定它在2.3.x中的工作原理类似。试试这个:
DataRecord.joins(:influencers => {:brand_influencers}, :brands).
conditions(:brands => {:id => 123}).
conditions(:brands => {:brand_influencers => {:top => true}})我建议您一点一点地建立关系,并检查正在生成的SQL。祝好运!
https://stackoverflow.com/questions/6278777
复制相似问题