Ваша забота может состоять из двух частей: 1) производительность и 2) необходимые усилия. Оба легко решаются.
Как отмечает Андрей С. в своем ответе, проблема удобства / усилий уменьшается с помощью before_filter
, который вызывает метод, выполняющий работу из класса ApplicationController
.
Проблема производительности - только немного больше работы. Вместо того, чтобы метод был
def most_recent_posts
Posts.order(created_at DESC).limit(3)
end
вместо этого сделайте это
def most_recent_posts
@most_recent_posts ||= Posts.order(created_at DESC).limit(3)
end
, который проверяет переменную экземпляра на nil; если ноль, он выполняет запрос и присваивает результат переменной экземпляра.
Вам также понадобится способ обновления при добавлении нового сообщения, так что, возможно, что-то вроде
def clear_most_recent_posts!
@most_recent_posts = nil
end
, а затем просто вызовите clear_most_recent_posts!
из метода (ов), которые изменяют таблицу. before_filter
будет выполнять свою работу только при необходимости.
Я уверен, что у некоторых более красноречивых рубинистов есть более хороший способ сделать это, но это идея.