Где логика нижнего колонтитула всего сайта принадлежит приложению Rails 3? - PullRequest
0 голосов
/ 26 февраля 2011

У меня есть нижний колонтитул для всего сайта, который должен отображать список последних пользователей и сообщений.Мне интересно, где логика должна получить эти данные.Должен ли я иметь метод «Recent_users» в UsersController и метод «Recent_posts» в PostsController, или у меня должен быть отдельный FooterController?

Как насчет частичных представлений / пользователей _recent_users и частичных _recent_posts в представлениях /посты и имеют ли нижний колонтитул частичную визуализацию их обоих?

1 Ответ

7 голосов
/ 26 февраля 2011

Вся «бизнес-логика» должна быть помещена в Model, , а не контроллер.Запрос для последних пользователей и сообщений должен быть в модели User и Post.Затем, если у вас есть элемент просмотра для всего сайта, переместите его в частичное и добавьте этот частичный элемент в application.html.erb.

# User.rb
model User
  def recent
    # logic and query here
  end
end

# Post.rb
(see above)

# application_controller.rb
before_filter :get_recent_posts
before_filter :get_recent_users
...
private
def get_recent_posts
  @recent_posts = Post.recent
end

def get_recent_users
  @recent_users = User.recent
end

# application.html.erb
...
<%= yield %>
...

<%= render :partial => 'layouts/footer', :locals => { :recent_users => @recent_users, :recent_posts => @recent_posts } %>

# layouts/_footer.html.erb
<% recent_users.each do |user| %>
  <%= link_to user.name, user %>
<% end %>

# same for posts

Несколько важных замечаний:

  1. не обращаются к переменным экземпляра (@foo) в частичном ... передайте его в хеш-код localals и получите доступ к нему как к переменной.Как правило, это плохая практика

  2. Вы также можете использовать модуль

  3. , чтобы изучить кэширование, потому что вы, вероятно, не хотите использовать базу данных ДВАЖДЫна каждой странице загрузки.Вы можете использовать кеширование фрагмента в нижнем колонтитуле и истекать его каждые 15 минут (вероятно, лучший вариант).

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