两部分Rails布局

时间:2010-01-25 12:58:48

标签: ruby-on-rails layout partials

我的网页由两部分组成,比如顶部和底部(页眉和页脚除外 - 这些部分在页面中是一致的)。根据操作动态生成这些部分的最佳做法是什么?

我提出的一种方法是查看顶部和部分底部;在布局中调用顶部的yield和底部的render部分。部分名称根据操作动态替换。

不确定这是最好的方法。

2 个答案:

答案 0 :(得分:8)

我认为你的想法很好。在您的观点中,您可以这样做:

<%- content_for :top do -%>
  […]
<%- end -%>

<%- content_for :bottom do -%>
  <%= render @partial_name %>
<%- end -%>

当然你应该检查部分是否存在并提供一些默认行为。但无论如何,我认为你已经意识到了这一点。

然后在你的布局中:

<div id="top">
  <%= yield :top %>
</div>

<div id="bottom">
  <%= yield :bottom %>
</div>

答案 1 :(得分:1)

这是我过去使用过的DSL视图的简化版本。为我们工作得很好。实际上,我们参数化了辅助方法,因此我们可以动态选择许多布局部分(包含带有侧边栏,多列等的页面)。

# app/views/shared/_screen.erb
<div id="screen">
  <div class="screen_header">
 <%= yield :screen_header %>
  </div>
  <div class="screen_body">
 <%= yield :screen_body
  </div>
  <div class="bottom">
    <%= yield :footer %>
  </div>
</div>

# app/helpers/screen_helper.rb
module ScreenHelper

 def screen(&block)
  yield block
  concat(render :partial => 'shared/screen')
 end

 def screen_header
   content_for :screen_header do
   yield
  end
 end

 def screen_body
  content_for :screen_body do
   yield
  end
 end

 def footer
  content_for :footer do
   yield
  end
 end
end

# app/views/layouts/application.erb
# only showing the body tag
<body>
  <%= yield :layout
<body>

# Example of a page
# any of the sections below (except screen) may be used or omitted as needed.
# app/views/users/index.html.erb
<% screen do %>
  <% screen_header do %>
  Add all html and/or partial renders for the header here.
  <%end%>
  <% screen_body do %>
    Add all html and/or partial renders for the main content here.
  <% end %>
  <% footer do %>
 Add all the html and/or partial renders for the footer content here.
  <% end %>
<% end %>