5

Rails 3.2 でレイアウトをネストすることは可能ですか? application.html.erb で使用される一般的なレイアウトを作成し、アプリケーション内のいくつかのビューでそれを使用できるようにしたいと考えています。Nested Layoutsという ruby​​ gem を見つけましたが、4 年間更新されていません。application.html.erb ファイルで次のようなことができれば最高です。

<% inside_layout 'html5_boilerplate' do %>
  <div id="container">
    <%= yield %>
  </div>
<% end %>
4

4 に答える 4

11

このブログ投稿で簡単な解決策を見つけました。

ApplicationHelperの に、次を追加しました。

def parent_layout(layout)
  @view_flow.set(:layout, output_buffer)
  self.output_buffer = render(:file => "layouts/#{layout}")
end

application.html.erb に、次を追加しました。

<% parent_layout 'html5_boilerplate' %>
于 2012-12-09T03:07:42.443 に答える
5

これらのいくつかを試しましたが、Rails 4 ではうまくいきませんでした。しかし、nested_layouts gem から少しインスピレーションを得て、次の簡単な修正を思いつきました。

module ApplicationHelper
  def inside_layout(layout, &block)
    layout = "layouts/#{layout}" unless layout =~ %r[\Alayouts/]
    content_for :content, capture(&block)
    render template: layout
  end
end

layouts/application.html.erb次に、テンプレートを次のように修正しました。

<html>
  <body>
    <div id="content">
      <%= content_for?(:content) ? yield(:content) : yield %>
    </div>
  </body>
</html>

これで、ネストされたレイアウトを次のように宣言できます。

# app/views/layouts/blog.html.erb
<%= inside_layout 'application' do %>
  <div id="blog_container">
    <%= yield %>
  </div>
<% end %>

お役に立てれば!

于 2013-05-04T16:33:45.263 に答える
1

公式のRailsガイドで説明されてcontent_forいる方法を使用できます。

于 2012-12-09T00:45:13.370 に答える
0

私の知る限り、アプリケーションのレイアウトはアプリ内のすべてを囲みます。したがって、実際には、個々のビュー レベルでの関係にこれらのパーシャルを組み込むだけです。

以下のような div の部分レンダリングに含まれるモデルの他の部分を持つ人物オブジェクトがあります。それはきれいではありませんが、うまくいけば、あなたが達成したいことの線に沿っています.

<div id="div-1">
    <fieldset><legend><b>Registrant Information</b></legend>
        <fieldset><legend><b>Personal Information</b></legend>
          <p class="field">
            <%= f.label "First Name" %>
            <%= f.text_field :firstname %>
        &nbsp;&nbsp;
            <%= f.label "Last Name" %>
            <%= f.text_field :lastname %>
        &nbsp;&nbsp;
            <%= f.label "Middle Init" %>
            <%= f.text_field :middleinit, :size=>2 %>
        &nbsp;&nbsp;
            <%= f.label "Nickname" %>
            <%= f.text_field :nickname %>
            </p> 
          <p class="field"> 
            <%= f.label :birthdate %>
            <%= f.date_select :birthdate, :start_year=>1935%>
        &nbsp;&nbsp;
            <%= f.label :gender %>
            <%= f.select :gender, ['Male','Female'] %>
            </p> 
          <p class="field">
            <%= f.label "T-Shirt Size" %><br />
            <%= f.select :shirtsize, ['YS','YM','YL','S','M','L','XL','XXL'] %>
            </p>
        </fieldset><br/>
        <fieldset><legend><b>Address Information</b></legend>
          <%= f.fields_for :addresses do |builder| %>
            <%= render "address_fields", f: builder %>
          <% end %>
        </fieldset>
        <fieldset><legend><b>Email</b></legend>
            <%= f.fields_for :emails do |builder| %>
                <%= render "email_fields", f: builder %>
            <% end %>
            <%= link_to_add_fields "Add Email", f, :emails %>
        </fieldset>
    </fieldset>    
</div>
于 2012-12-09T00:54:21.587 に答える