我有以下型号:
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
但这不起作用,条件被忽略。
你能看到解决方案吗?
答案 0 :(得分:1)
为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
这更好,更可重复使用,因为Lead模型本身现在知道如何找到特定广告系列的潜在客户。
如果想了解如何使用named_scopes,请查看http://apidock.com/rails/ActiveRecord/NamedScope/ClassMethods/named_scope
答案 1 :(得分:0)
试试这个:
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
OR
self.leads.find_all_by_compaign_keyword_id(campaign_keyword_id)