如何将变量从控制器传递到rails中的布局助手

时间:2014-01-14 15:50:09

标签: ruby-on-rails ruby-on-rails-3

我有一个非常复杂的设计模板,它有不同的方法来包装它的上下文。

我必须使用

<body>
  yield
</body>

有时

<body>
  <div class="foo"> 
    yield
  </div>
</body>

有时候

<body>
  <div class="bar">
    <div id="breadcrumbs"> 
      some content
    </div>
    <div class="innnerwrap" id="zurb">
      yield
    </div>
  </div>
</body>

等等

我想能够从我的控制器控制它们。我以为我会制作template_helper.rb来决定要展示什么。

  • 有什么建议吗?
  • 如果只有“包装器”div改变
  • ,我也想防止有5个或更多布局

1 个答案:

答案 0 :(得分:0)

我看到了两种方法:

1.在控制器中设置布局:

class MyController < ApplicationController
  layout 'admin', :only => [:show, :index]

  # Controller methods
end

2.有1个布局,包含多个动态部分:

layout.html.erb:
<body>
 <% if params[:controller] == 'MyController' && params[:action] == 'MyAction' %>
    <% render :partial => 'partial1' %>
 <% elsif params[:controller] == 'MyController' && params[:action] == 'MyAction2' %>
    <% render :partial => 'partial2' %>
<% elsif params[:controller] == 'MyController2' && params[:action] == 'MyAction' %>
    <% render :partial => 'partial3' %>
 <% end %>
</body>

_partial1.html.erb
<%= yield %>


_partial2.html.erb
<div class="foo"> 
    <%= yield %>
</div>

_partial2.html.erb
<div class="bar">
    <div id="breadcrumbs"> 
      some content
    </div>
    <div class="innnerwrap" id="zurb">
      <%= yield %>
    </div>
</div>