2011-08-14 69 views
0

這裏是什麼,我試圖做一些樣機代碼:導軌 - 呈現佈局的部分

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 

有關多一點點信息主題,看看this,thisthis