Вся «бизнес-логика» должна быть помещена в 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
Несколько важных замечаний:
не обращаются к переменным экземпляра (@foo) в частичном ... передайте его в хеш-код localals и получите доступ к нему как к переменной.Как правило, это плохая практика
Вы также можете использовать модуль
, чтобы изучить кэширование, потому что вы, вероятно, не хотите использовать базу данных ДВАЖДЫна каждой странице загрузки.Вы можете использовать кеширование фрагмента в нижнем колонтитуле и истекать его каждые 15 минут (вероятно, лучший вариант).