代码之家  ›  专栏  ›  技术社区  ›  Jason

在Rails中使用has\u many through关系访问记录时,如何应用条件?

  •  0
  • Jason  · 技术社区  · 14 年前

    我有以下型号:

    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 :conditions => ['campaign_keyword_id = #{campaign_keyword_id}']
    end
    

    你能找到解决办法吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Chris    14 年前

    创建 named_scope Lead 模特,就像这样:

    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
    

    有关如何使用命名的\u作用域的更多信息,请查看 http://apidock.com/rails/ActiveRecord/NamedScope/ClassMethods/named_scope

        2
  •  0
  •   Harish Shetty    14 年前

    试试这个:

    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)