繁体   English   中英

在Rails中使用has_many通过关系访问记录时如何应用条件?

[英]How to apply conditions when accessing records using a has_many through relationship in Rails?

我有以下型号:

class Campaign < ActiveRecord::Base
  has_many   :campaign_keywords
  has_many   :leads, :through => :campaign_keywords
end

class CampaignKeyword < ActiveRecord::Base
  belongs_to :campaign
  has_many   :leads
end

class Lead < ActiveRecord::Base
  belongs_to :campaign_keyword
end

我正在尝试在“广告系列”模型中构建一个函数,该函数将仅返回属于给定campaign_keyword的销售线索。

我的尝试是:

def leads?(campaign_keyword_id = -1)
  self.leads :conditions => ['campaign_keyword_id = #{campaign_keyword_id}']
end

但这不起作用,条件被忽略。

您能看到解决方案吗?

Lead模型创建named_scope ,如下所示:

class Lead < ActiveRecord::Base
  belongs_to :campaign_keyword

  named_scope :with_keyword, lambda { |keyword| { :conditions => { :campaign_keyword => keyword } } }
end

现在,当您想获得特定广告系列关键字的潜在客户时,您可以这样做:

def leads_for_campaign(keyword)
  self.leads.with_keyword(keyword)
end

这样更好,更可重用,因为潜在客户模型本身现在知道如何为特定广告系列找到潜在客户。

有关您可以使用named_scopes进行操作的更多信息,请访问http://apidock.com/rails/ActiveRecord/NamedScope/ClassMethods/named_scope

尝试这个:

def leads?(campaign_keyword_id = -1)
  self.leads.all :conditions => ['campaign_keyword_id = #{campaign_keyword_id}']
end

我将重写您的查询,如下所示:

def leads?(campaign_keyword_id = -1)
  self.leads.all :conditions => ['campaign_keyword_id = ?', campaign_keyword_id]
end

要么

self.leads.find_all_by_compaign_keyword_id(campaign_keyword_id)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM