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