(尼克博士!)
我正在努力为我们的应用管理员收紧工作,在一些地方我们有一些非常粗俗的代码。
例如,我们有市场,其中包含交易。在一些地方,我们做这样的事情:
@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>查询以检索我们已经拥有的市场名称!
告诉我有一种方法可以通过一个查询获得我需要的所有东西,因为无论如何它都是相关的,或者至少要清理它,所以这不是一场噩梦。
谢谢
答案 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
试试吧......