8

私はUsers_controllerで定義しました:

layout "intro", only: [:new, :create]

私のレイアウトは次のようになります: Intro.html.haml

!!! 5
%html{lang:"en"}
%head
  %title Intro
  = stylesheet_link_tag    "application", :media => "all"
  = javascript_include_tag "application"
  = csrf_meta_tags
%body{style:"margin: 0"}
  %header
    = yield
  %footer= debug(params)

レイアウトとして呼び出すページをレンダリングすると、ファイルintro内にネストされてしまい、良くありません。application.html.haml

この望ましくないレイアウトのネストを回避する方法はありますか?

前もって感謝します!

4

1 に答える 1

51

問題は私のコントローラーにありました。次のように複数のレイアウト インスタンスを宣言していました。

class UsersController < ApplicationController
  layout "intro", only: [:new, :create]
  layout "full_page", only: [:show]
  ...
end

これをしないでください! 2 番目の宣言が優先され、目的の効果が得られません。

代わりに、レイアウトが単にアクション固有のものである場合は、次のようにアクション内で宣言するだけです:

def show
...
render layout: "full_page"
end

または、もう少し複雑な場合は、シンボルを使用して、次のように実行時に処理をメソッドに任せることができます。

class UsersController < ApplicationController
  layout :determine_layout
  ...

  private
    def determine_layout
      @current_user.admin? ? "admin" : "normal"
    end
end
于 2012-04-16T16:12:13.990 に答える