Ruby on rails 在Rails中使用has_many-through关系访问记录时,如何应用条件?

Ruby on rails 在Rails中使用has_many-through关系访问记录时,如何应用条件?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有以下型号: 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 < A

我有以下型号:

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
但这不起作用,条件被忽略了

你能找到解决办法吗?

试试这个:

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

为您的
Lead
模型创建一个

class Lead < ActiveRecord::Base
  belongs_to :campaign_keyword

  named_scope :with_keyword, lambda { |keyword| { :conditions => { :campaign_keyword => keyword } } }
end
这是更好的和更可重用的,因为潜在客户模型本身现在知道如何找到特定活动的潜在客户


有关如何使用命名的_作用域的更多信息,请查看它仍然忽略:conditions参数。生成的SQL是:从
leads
内部连接
campaign\u关键字
上的
leads
.campaign\u关键字id=
campaign\u关键字
.id>中选择
leads
.campaign\u关键字=1])您在哪里尝试了第二个选项?只是出于好奇,当此方法与活动无关时,为什么要将其添加到活动模型中?为什么不能使用现有的关联来执行
campaign\u关键字.leads
self.leads.find_all_by_compaign_keyword_id(campaign_keyword_id)
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