2011-04-02 29 views
35

如果我想爲某個特定動作(比如show動作)使用與controller.rb文件頂部聲明佈局不同的佈局,我該怎麼做這個?這在軌道上必須是可能的,但我似乎無法找到任何有關它的信息。針對特定動作使用佈局

+4

+1我同意Rails文檔是一個地獄。 – 2011-04-02 18:21:33

回答

42
render :layout => 'otherlayout' 
+1

接受這個答案,因爲它回答了我問的具體問題,但兩個答案都很好,並實現了目標 – providence 2011-04-02 18:27:02

+4

+1:正如我所說的,唐的也是對的。對於這個人來說,+1是我參與過的最不受歡迎的社區。每個人都更關心生產力而非正確。當互聯網2.0出來時,這應該是主要概念。 – 2011-04-02 18:30:20

37
layout 'layout', :only => [:first_action, :second_action] 
layout 'second_layout', :only => [:third_action, :fourth_action] 

唐的是正確的爲好,只是取決於你的應用程序,它是更幹(或DRY-ER?)


編輯 我以前的代碼是錯誤的。您不能多次指定layout函數。我發現這個解決方案在線動態佈局渲染:

class OrdersController < BaseController 
    layout :determine_layout 

private 
    def determine_layout 
    %w(new).include?(action_name) ? "some_layout" : "public" 
    end 
end 

來源:apidock.com/rails/Actio...

+4

+1:如果您將佈局應用於多個操作,則效果會更好。 – 2011-04-02 18:28:36

+1

Rails似乎並不接受每個文件的多個佈局規範。您可以指定:僅限a,b,c,但不能指定具有不同目標的另一組。 – 2013-04-15 01:08:54

+1

@BradBarrow查看我編輯的多種佈局 – 2013-04-15 04:35:45

0

下面的例子適用所需的佈局,以具體的行動,否則它使用默認佈局(佈局/ application.html。 ERB)。

class ArticlesController < ApplicationController 
    layout "article_editor", only: [:new, :edit] 

    def index 
    # default layout 
    end 

    def new 
    # article_editor layout 
    end 

    def edit 
    # article_editor layout 
    end 
end