如果我有象模型的方法:模型法或控制器實例變量,Ruby on Rails的3
def favoured_users
self.followers.limit(5).order("created_at")
end
與像一個視圖塊:
<% 5.times do |i| %>
<li><%= @user.favoured_users[i].name %></li>
<% end %>
...將我被調用favoured_user方法五次,每次請求5個用戶,最終得到25個被調用的用戶?
我只是想知道我是否應該把favoured_users的結果在一個變量在我的控制器來代替:
@favoured_users = @user.followers.limit(5).order("created_at")
那是要到服務器更少電話?
**編輯**
我不知道這是否意味着該值從緩存中來,看來它是(緩存BCOS,但我不知道那是什麼意思),但我還沒有明確告訴它,我必須做什麼,以確保它不來回回緩存:
User Load (0.6ms) SELECT `users`.* FROM `users` INNER JOIN `relationships` ON `users`.`id` = `relationships`.`followed_id` WHERE `relationships`.`follower_id` = 1 ORDER BY full_name, created_at LIMIT 5
CACHE (0.0ms) SELECT `users`.* FROM `users` INNER JOIN `relationships` ON `users`.`id` = `relationships`.`followed_id` WHERE `relationships`.`follower_id` = 1 ORDER BY full_name, created_at LIMIT 5
CACHE (0.0ms) SELECT `users`.* FROM `users` INNER JOIN `relationships` ON `users`.`id` = `relationships`.`followed_id` WHERE `relationships`.`follower_id` = 1 ORDER BY full_name, created_at LIMIT 5
CACHE (0.0ms) SELECT `users`.* FROM `users` INNER JOIN `relationships` ON `users`.`id` = `relationships`.`followed_id` WHERE `relationships`.`follower_id` = 1 ORDER BY full_name, created_at LIMIT 5
CACHE (0.0ms) SELECT COUNT(*) FROM `users` INNER JOIN `relationships` ON `users`.`id` = `relationships`.`follower_id` WHERE `relationships`.`followed_id` = 1
User Load (0.5ms) SELECT `users`.* FROM `users` INNER JOIN `relationships` ON `users`.`id` = `relationships`.`follower_id` WHERE `relationships`.`followed_id` = 1 ORDER BY full_name, created_at LIMIT 5
CACHE (0.0ms) SELECT `users`.* FROM `users` INNER JOIN `relationships` ON `users`.`id` = `relationships`.`follower_id` WHERE `relationships`.`followed_id` = 1 ORDER BY full_name, created_at LIMIT 5
CACHE (0.0ms) SELECT `users`.* FROM `users` INNER JOIN `relationships` ON `users`.`id` = `relationships`.`follower_id` WHERE `relationships`.`followed_id` = 1 ORDER BY full_name, created_at LIMIT 5
CACHE (0.0ms) SELECT `users`.* FROM `users` INNER JOIN `relationships` ON `users`.`id` = `relationships`.`follower_id` WHERE `relationships`.`followed_id` = 1 ORDER BY full_name, created_at LIMIT 5
是值從緩存中返回?
編輯我不知道如何從我的觀點訪問變量,我有方法按塞比的編輯和在我看來,我想:
<% @user.favoured_followers do %>
<li><%= @favoured.first.username unless @favoured.first.blank? %></li>
<li><%= @favoured.second.username unless @favoured.second.blank? %></li>
<li><%= @favoured.third.username unless @favoured.third.blank? %></li>
<li><%= @favoured.fourth.username unless @favoured.fourth.blank? %></li>
<li><%= @favoured.fifth.username unless @favoured.fifth.blank? %></li>
<% end %>
沒有被退回?
Rails會嘗試緩存每個冗餘查詢請求。那些'CACHE'消息意味着它從緩存中返回一個值,而不是再次訪問數據庫。這很有幫助,但在Sebi的答案中,您最好明確緩存值,而不要依靠Rails爲您做。 – Brandan 2012-02-25 17:16:59
我現在明白布蘭登謝謝。 – Darcbar 2012-02-26 13:28:23