Ruby on rails 协会的业绩更好
现在我有一个叫做“活动”的表格,有很多点击率,如果我打电话说: Campaign.find(30).hitsRuby on rails 协会的业绩更好,ruby-on-rails,activerecord,associations,Ruby On Rails,Activerecord,Associations,现在我有一个叫做“活动”的表格,有很多点击率,如果我打电话说: Campaign.find(30).hits 任何建议都很好 我的ActiveRecord可能有点生锈,请原谅,但IIRCCampaign.find(30).hits至少是两个独立的查询。Campaign.find(30,:include=>[:hits])。hits如何做?应该执行单个查询。那么: Campaign.find(30).hits.count 你也可以考虑在命中。RB < /代码>中添加以下内容(假设战役和命中之间的
任何建议都很好 我的ActiveRecord可能有点生锈,请原谅,但IIRC
Campaign.find(30).hits
至少是两个独立的查询。Campaign.find(30,:include=>[:hits])。hits如何做?应该执行单个查询。那么:
Campaign.find(30).hits.count
你也可以考虑在<代码>命中。RB < /代码>中添加以下内容(假设战役和命中之间的一对多关系)。
然后,您需要在活动
表中有一个名为点击次数
的列。如果您只获得计数,则这将避免完全命中命中
您可以检查完整的运行情况。未定义错误,它不应该知道如何找到30 ID。我相信在这种情况下它也会这样做。无论如何,这里的两个查询会更有效,因为您不希望它将所有点击加入到活动行中。基本上你只需要“WHERE campaign_id=30”
def self.total_hits
find :first, :select => 'COUNT(id) as hits', :conditions => ["campaign_id = ?", self.id]
end
def self.hits
Rails.cache.fetch("Campaign_Hits_#{self.campaign_id}", :expires_in => 40) {
find(:first, :select => 'COUNT(id) as hits', :conditions => ["campaign_id = ?", self.campaign_id]).hits
}
end
Campaign.find(30).hits.count
belongs_to :campaign, :counter_cache => true