2011-08-14 13 views
0

のレイアウトをレンダリングすると、ここで私が何をしようとしています何のいくつかのモックアップコードです:あなたが見ることができるようにRailsの - 部分

class ApplicationController < ActionController::Base 
    layout "application" 
end 

class SomeController < ActionController::Base 

    verify :method => :get, :only => [:index] 
    def index 
    @some_objects = Some.collect 
    end 

end 

# Now in: views/some/index.html.erb 

<% if @some_objects %> 
    # use the application layout 
    <%= render(:partial => 'some/objects', :locals => {:some_objects => @some_objects}) %> 
<% else %> 
    # use a different layout than application 
    # some/sales_page --> views/some/_sales_page.html.erb 
    # layouts/sales --> views/layouts/sales.html.erb 
    <%= render('some/sales_page', :layout => 'layouts/sales') %> 
<% end %> 

、私は/部分一部のアプリケーションとは異なるレイアウトをレンダリングしようとしていますsales_page。私は何をしなければならないのですか?

注:私のRailsのバージョンは2.3.11です。

答えて

-1

コントローラレイヤでのみレイアウトを変更できます。

class SomeController < ActionController::Base 
    layout :choose_layout 
    verify :method => :get, :only => [:index] 
    def index 
    @some_objects = Some.collect 
    end 

    private 
    def choose_layout 
    @some_objects = Some.collect 
    @some_objects ? "application" : "different_layout" 
    end 
end 
+0

「コントローラーレイヤーでのみレイアウトを変更できるので」と投票しました。正確ではありません。 'render'メソッドはテンプレートを受け入れます。 – Mohamad

1

これは非常に簡単ですが、render方法は:layoutオプション(基本的な方法あなたはそれあなたの例があります)、しかし、あなたのレイアウトは、呼び出し元のファイルと同じディレクトリに生きることができるがかかり、それが部分的な命名規則を使用しています(つまり、アンダースコアで始まります)。以下の線に沿って何かになるのであれば、あなたの例の場合:

#In: views/some/index.html.erb 

<% if @some_objects %> 
    # use the application layout 
    <%= render(:partial => 'objects', :locals => {:some_objects => @some_objects}) %> 
<% else %> 
    <%= render(:partial => 'sales_page', :layout => 'sales_layout') %> 
<% end %> 

次のようにあなたのviews/someフォルダの内容は、次のようになります。

views/some/index.html.erb 
views/some/_objects.html.erb 
views/some/_sales_page.html.erb 
views/some/_sales_layout.html.erb 

に少し詳細情報について件名はthisthisthisです。

関連する問題