如果我有象模型的方法:模型法或控制器实例变量,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