Назовите последние посты на макете - PullRequest
1 голос
/ 15 марта 2012

Представьте, что у меня есть блог, и я хочу, чтобы нижний колонтитул или боковая панель отображали мои 3 последних сообщения в любой момент времени.

Каков наилучший способ сделать это?

Я могу вызвать @recent_posts на каждом контроллере, чтобы они были готовы к макету, но это не лучший способ ... вообще ...

@recent_posts = Posts.all(:limit => 3)

Я возился с частями, но им нужна переменная экземпляра, несущая @recent_posts.

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Ваша забота может состоять из двух частей: 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 будет выполнять свою работу только при необходимости.

Я уверен, что у некоторых более красноречивых рубинистов есть более хороший способ сделать это, но это идея.

1 голос
/ 15 марта 2012

Вы можете поместить часть, где у вас есть сообщения, в частичную часть и использовать ее в общем макете вашего приложения.

Чтобы загрузить их все в каждом контроллере, вы можете сделать before_filter в вашем ApplicationController, в котором вы установите переменную экземпляра, которая будет доступна в вашем фрагменте, который будет отображаться в макете

Таким образом, вы можете сделать это только один раз, и это будет сделано везде (конечно, вы можете установить условия для фильтра и макета, чтобы загрузить их, когда вам нужно, это если вы действительно не нужны на каждом страница)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...