在我的应用程序中,我有一个侧边栏,我想要包含一个页面列表。在MVC设置上作弊,我可以很容易地显示如下(在HAML中):
# layouts/_sidebar.html.haml
%h4 Pages
%ul.pages
- for page in Page.all
%li= link_to page.title, page
现在,这很好用,但显然它不符合惯例。问题是,这个共享布局部分存在于大多数(但不是全部)视图中,因此从控制器层提供页面意味着需要将实例变量注入到应用程序中的几乎每个控制器动作中。那不是很干净或干。
那么,你会如何处理这种情况?是否有一个干净,干净的地方来放置这种简单的查询更好地尊重Rails MVC约定?
答案 0 :(得分:2)
恕我直言,处理此类情况的最佳方法是使用cell gem。
答案 1 :(得分:1)
不确定。经典的方法是通过应用程序控制器中的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