1
在我的應用程序中,我有三種模式:市場,交易和用戶。關係是非常簡單的:現在ActiveRecord在查詢中重複包含關聯?
class Market
has_many :users
has_many :deals
end
class User
belongs_to :market
end
class Deal
belongs_to :market
end
,爲了更方便地查詢其中的一些關係,市場模式連接到它的一些方法:
class Market
def revenue_by_date(date)
deal = self.deals.find(:all, :select => 'id, purchased, price', :conditions => ["start_time =?", date])[0]
i = 0
if deal && deal.isMade?
i = deal.purchased * deal.price
end
return i
end
def users_for_market
return self.users.count
end
end
所以,在我的控制,我需要收集有關所有市場的數據,然後我需要在各地進行深入研究。所以我有一個查詢,看起來像這樣:
markets = Market.find(:all, :order => :name, :include => [:users, :deals])
這將運行兩個包括查詢不如預期,但後來在我的代碼,我做這樣的事情:
markets.each do |m|
m.users_for_market
m.revenue_by_date(date_var)
end
它運行的各個查詢在那些模型方法中。我認爲:include應該取而代之嗎?
我可以做些什麼來減少我正在運行的查詢次數?
users_for_market變化就像一個冠軍。儘管有關收入變化的快速問題:如果我還沒有運行查詢語句,會發生什麼?例如,我把這個方法稱爲一次性的。既然它需要一個數組,我可以在數組不存在的情況下使用if語句嗎? – 2010-10-27 18:08:14
NM!想出了我自己的問題的答案。您的解決方案非常好 – 2010-10-27 18:15:47
當然,沒問題!是的,如果你還沒有調用'find',那麼調用market.deals會自動完成。這可能是你想出來的,我只是想提到任何讀這個的人。 – 2010-10-27 18:22:41