2011-04-02 80 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