需要帮助优化一些Rails 2.3 ActiveRecord代码

时间:2010-09-22 18:35:17

标签: ruby-on-rails optimization activerecord

(尼克博士!)

我正在努力为我们的应用管理员收紧工作,在一些地方我们有一些非常粗俗的代码。

例如,我们有市场,其中包含交易。在一些地方,我们做这样的事情:

@markets = Market.find(:all, :select => ['name, id'])
@deals = Deal.find(:all, :select => ['subject, discount_price, start_time, end_time'], :conditions => ['start_time >= ? AND end_time <= ?', date1 date2])

然后在相应的视图中,我们做了类似的事情:

@markets.each do |m|
  =m.name
end

@deals.sort!{ |a,b| a.market.name <=> b.market.name }
@deals.each do |d|
  =d.subject
  =d.market.name
end

这会产生一些愚蠢的查询:一个用于获取市场名称和ID,另一个用于获取所有交易信息,然后对于每笔交易(其中有数千个),我们运行另一个< / strong>查询以检索我们已经拥有的市场名称!

告诉我有一种方法可以通过一个查询获得我需要的所有东西,因为无论如何它都是相关的,或者至少要清理它,所以这不是一场噩梦。

谢谢

2 个答案:

答案 0 :(得分:0)

如果您在搜索:include => :market时使用deals,则不会运行查询来检索每个market的{​​{1}}名称。它会急切地加载。

deal

希望它有所帮助。

答案 1 :(得分:0)

你可以这样写..

@deals_with_market_name = Deal.find(:all, :include => :market, 
:select => ['subject, discount_price, start_time, end_time,market.name as market_name'], 
:conditions => ['start_time >= ? AND end_time <= ?', date1 date2], 
:order => "market.name")

并且在视野中......

@deals.each do |a|
  =a.subject
  =a.market_name
end

试试吧......