Где разместить запрос, который должен быть включен во все или большинство представлений - PullRequest
0 голосов
/ 26 ноября 2011

В моем приложении есть боковая панель, в которую я хочу включить список страниц.Обманывая настройку MVC, я могу довольно легко отобразить это следующим образом (в HAML):

# layouts/_sidebar.html.haml
%h4 Pages
%ul.pages
  - for page in Page.all
    %li= link_to page.title, page

Теперь, это работает просто отлично, но очевидно, что это противоречит соглашению.Проблема состоит в том, что эта частичная общая компоновка присутствует в большинстве (но не во всех) представлениях, и поэтому обслуживание страниц со слоя контроллера означало бы необходимость внедрения переменной экземпляра практически в каждое действие контроллера в приложении.Это не очень чисто или сухо.

Итак, как бы вы справились с такой ситуацией?Есть ли чистое, СУХОЕ место для размещения такого рода простого запроса, который лучше соответствует соглашению Rails MVC?

Ответы [ 2 ]

2 голосов
/ 26 ноября 2011

ИМХО, лучший способ справиться с подобной ситуацией - использовать клеточный камень .

1 голос
/ 26 ноября 2011

Конечно. Классическим способом является использование before_filter в контроллере приложений:

# controllers/application_controller.rb
before_filter :get_pages

def get_pages
  @pages = Page.all
end

# layouts/application.html.erb (adjust for HAML)
<%= unless @pages.empty? %> # safety
  <%= render 'shared/_sidebar' %>
<% end %>

# Using a 'shared' directory is more common for these components
# than stuffing everything into layouts, but it doesn't really matter.
#
# shared/_sidebar.html.haml
%h4 Pages
%ul.pages
- for page in @pages
  %li= link_to page.title, page
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...