2016-04-05 11 views
2

レイアウト 'pages.html.erb'が指定されたPagesControllerがあります。同じコントローラ内に2つの異なるレイアウトテンプレートがありますか?

class PagesController < Spree::StoreController 
    layout 'pages' 
    respond_to :html 

    def lifestyle 
     render 'lifestyle' 
    end 

    def co_step_1 
     render 'co_step_1' 
    end 

    def co_step_2 
     render 'co_step_2' 
    end 

    end 

別のレイアウトを使用する別の方法をPagesControllerで使用することはできますか? 言い換えれば、別の方法でlayout 'pages.html.erb'を上書きしたいと思います。

答えて

4

少し異なる他の人たちから。あなたが使用するレイアウトを決定するために使用したい

class PagesController < Spree::StoreController 

    layout :resolve_layout 
    respond_to :html 

    def lifestyle 
     render 'lifestyle' 
    end 

    def co_step_1 
     render 'co_step_1' 
    end 

    def co_step_2 
     render 'co_step_2' 
    end 

    private 

    def resolve_layout 
    action_name == 'pages' ? 'pages' : 'custom_layout' 
    end 

end 

または任意の論理:アクションまたは類似の前の必要は、同じように、使用するレイアウトを区別するためにlayoutとメソッドを使用します。

+1

これは 'before_action'フックよりも優れています。 –

1

はい、あなたはまた、決定するために、各アクションの前に実行されるメソッドを追加することができ、レイアウトオプション

def my_new_layout 
    render layout: "my_new_layout" 
end 
+0

私はこれを混乱させました。これは、 'app/views/layouts/my_new_layout.html.erb'を' app/views/pages/my_new_layout'をビューファイルとして持つレイアウトとしてレンダリングします。 –

+0

ありがとうございましたj-dexx、まさに私が探していたもの! – StandardNerd

1

を指定することができます例えば、レイアウトは、

class PagesController < Spree::StoreController 
    before_action :set_layout 
    respond_to :html 

    def lifestyle 
     render 'lifestyle' 
    end 

    def co_step_1 
     render 'co_step_1' 
    end 

    def co_step_2 
     render 'co_step_2' 
    end 

    private 
    def set_layout 
     %w(co_step_1 co_step_2).include?(params[:action]) ? "pages" : "other" 
    end 
    end 
+0

'set_layout'メソッドを'%w(co_step_1 co_step_2).include?(params [:action])にするべきではありませんか? "ページ": "その他" –

+0

ええ、私はコーヒーの後まで、質問に答える必要があります、ありがとう。 :) – trh

+0

私たち全員が苦しんでいる苦境: –

関連する問題