Если у меня есть метод, модель, как:модели или переменная экземпляра контроллера, Ruby по рельсам 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")
бы, что будет меньше вызовов на сервер?
** EDIT **
Я не уверен, если это означает, что значение приходит из кэша, оказывается, что (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
ли значение возвращающегося из кэша?
EDIT Я не уверен, как получить доступ к переменному с моей точкой зрения, у меня есть метод, как на редактирование СЦББИ и на моем взгляде, я пытаюсь:
<% @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' означают, что он возвращает значение из кеша, а не снова удаляет базу данных. Это полезно, но вам лучше явно кэшировать значения, как в ответе Себи, чем в зависимости от Rails, чтобы сделать это за вас. – Brandan
Я понимаю, теперь Брэндон благодарит. – Darcbar