首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接的rails连接(rails 2.3.5和ruby 1.8.7)

连接的rails连接(rails 2.3.5和ruby 1.8.7)
EN

Stack Overflow用户
提问于 2011-06-08 20:36:25
回答 3查看 1.7K关注 0票数 2

我有过

data_records、品牌和影响力

data_records有很多品牌data_records只有一个有影响力的人

品牌通过brand_influencers关联拥有许多有影响力的人,该关联有一个名为top (布尔值)的属性。

以下是我的模型:

代码语言:javascript
复制
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关系

谢谢,乔尔

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-30 20:57:41

它的rails 2.3.5版本是

代码语言:javascript
复制
DataRecord.find :all, :conditions => ['brands.name = ? AND influencers.top = ?', 'name', true], :joins => {:brands => :influencers}

我假设一个品牌有一个名字,而你是通过名字来寻找这个品牌的。您需要像这样更改Brand

代码语言:javascript
复制
class Brand < ActiveRecord::Base
    has_and_belongs_to_many :data_records
    has_and_belongs_to_many :influencers
end
票数 4
EN

Stack Overflow用户

发布于 2011-06-08 20:42:14

听起来你想用

代码语言:javascript
复制
has_many :foos, :through=>:bar

代码语言:javascript
复制
has_one :foo, :through=>:bar

试试这个:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2012-03-27 07:12:51

您可以从另一个join获取并在where中引用它们,如下所示:

代码语言:javascript
复制
DataRecord.joins(:influencers => {:brand_influencers}, :brands).
  where(:brands => {:id => 123}). 
  where(:brands => {:brand_influencers => {:top => true}})

我非常确定它在2.3.x中的工作原理类似。试试这个:

代码语言:javascript
复制
DataRecord.joins(:influencers => {:brand_influencers}, :brands).
  conditions(:brands => {:id => 123}). 
  conditions(:brands => {:brand_influencers => {:top => true}})

我建议您一点一点地建立关系,并检查正在生成的SQL。祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6278777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档