2012-08-04 39 views
0

我對軌道相當新,並且卡在佈局的概念上。如何切換出軌道佈局?

我的應用程序使用Bootstrap網格。在我的application.html.erb我有以下內容:

<div class="row"> 
<div class="span8"> 
    <%= yield %> 
</div> 

<div class="span4"> 
    <%= render 'layouts/right_col'%> 
</div> 
</div> 

這是一個基本的主欄,右手狹窄的列布局。該應用程序的大部分將具有此佈局。

但在一些特定視圖行動 - 我想有一個完整寬度列:

<div class="row"> 
<div class="span12"> 
    <%= yield %> 
</div> 
</div> 

我應該如何安排我的佈局,以支持這一點?重寫發生在哪裏?

感謝您的幫助!

+0

請參閱http://guides.rubyonrails.org/layouts_and_rendering.html – house9 2012-08-04 01:38:56

回答

2

有幾種方法去做這個。最簡單的方法就是爲你創建另一個佈局文件。例如創建app/views/layouts/wide.html.erb即有:

<div class="row"> 
<div class="span12"> 
    <%= yield %> 
</div> 
</div> 

代碼在裏面。然後,您可以選擇與您的控制器方法佈局像這樣渲染:

def show 
    ... 
    render :layout => :wide 
end 

Rails 3中也有一種機制來建立一個模板層次結構。這個設置稍微複雜一些,但它可能會導致更乾的代碼。你可以在this railscast中瞭解更多。

+0

我掙扎於第二個選項,所以我最終創建了一個不同的應用程序模板,它具有不同的網格佈局,但這並不感覺非常乾燥對我來說... – cman77 2012-08-04 19:52:01

1

對我來說有兩種選擇:

1)你創建兩個不同的佈局。如果唯一的區別是菜單,那麼我不會那樣做。

2)對於不應顯示菜單,聲明一個變量,在控制器有關的行動:在佈局

def some_action_with_no_side_menu 

    @no_side_menu = 1 
    #... 
end 

然後:

<% if defined? @no_side_menu %> 
<div class="row"> 
    <div class="span12"> 
    <%= yield %> 
    </div> 
</div> 
<% else %> 
    <div class="row"> 
    <div class="span8"> 
    <%= yield %> 
    </div> 

    <div class="span4"> 
     <%= render 'layouts/right_col'%> 
    </div> 
    </div> 
<% end %>