2011-04-10 45 views
0

我需要在視圖中最小化數據庫查詢。首先讓我們看看我的設置:(末尾問題)Rails - 如何最小化這些查詢?

我的模型:

- User has_many Followings 
- Following belongs_to Show/User 
- Show has_many Episodes 

FollowingsController:

Following.find(:all, :conditions => { :user_id => current_user.id }, :include => [:show], :order => "shows.name") 

顯示模式:

def prev_episode() 
    Episode.find(:first, :conditions => ["show_id = ? AND air_date < ?", self.id, Date.today], :order => "air_date desc, number desc") 
end 

def next_episode() 
    Episode.find(:first, :conditions => ["show_id = ? AND air_date >= ?", self.id, Date.today], :order => "air_date asc, number asc") 
end 

我的觀點(簡體):

<% @followings.each do |following| %> 
    <tr> 
    <td><%= link_to "#{following.show.name}", show_path(:permalink => following.show.permalink) %></strong></td> 
    <td><%= following.show.prev_episode # UNWANTED QUERY %></td> 
    <td><%= following.show.next_episode # UNWANTED QUERY %></td> 
    </tr> 
    <% end %> 

這使得可怕的每個請求的查詢很多。
該視圖最多可以包含100行,這使得超過200個請求!
我真的需要儘量減少這一點。有任何想法嗎?

PS。如有必要,我可以使用memcached。

回答

0

解決這個問題的一種方法是讓每個情節都有一個前一集和一個後續情節鏈接爲外鍵,這將保存日期搜索。這種方法的缺點是,你將需要鏈接添加劇集,但沒有免費的午餐...