Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 每个动作的轨道布局?_Ruby On Rails - Fatal编程技术网

Ruby on rails 每个动作的轨道布局?

Ruby on rails 每个动作的轨道布局?,ruby-on-rails,Ruby On Rails,我对某些操作使用了不同的布局(主要用于大多数控制器中的新操作) 我想知道指定布局的最佳方式是什么?(我在同一控制器中使用3个或更多不同的布局) 我不喜欢使用 呈现:布局=>'name' 我喜欢做 布局“名称”,仅限=>[:新建] 但我不能用它来指定2个或更多不同的布局 例如: 当我在同一个控制器中使用不同的布局名称和不同的“仅”选项调用布局2次时,第一个将被忽略-这些操作不会显示在我指定的布局中 注意:我使用的是Rails 2。您可以使用一种方法来设置布局 class MyController

我对某些操作使用了不同的布局(主要用于大多数控制器中的新操作)

我想知道指定布局的最佳方式是什么?(我在同一控制器中使用3个或更多不同的布局)

我不喜欢使用

呈现:布局=>'name'

我喜欢做

布局“名称”,仅限=>[:新建]

但我不能用它来指定2个或更多不同的布局

例如:

当我在同一个控制器中使用不同的布局名称和不同的“仅”选项调用布局2次时,第一个将被忽略-这些操作不会显示在我指定的布局中


注意:我使用的是Rails 2。

您可以使用一种方法来设置布局

class MyController < ApplicationController
  layout :resolve_layout

  # ...

  private

  def resolve_layout
    case action_name
    when "new", "create"
      "some_layout"
    when "index"
      "other_layout"
    else
      "application"
    end
  end
end
class MyController
您可以使用以下命令指定单个操作的布局:

有一个gem(按动作布局):)


如果仅在两种布局之间进行选择,则可以使用:

class ProductsController

class ProductsController
您还可以使用渲染指定操作的布局:

def foo
  render layout: "application"
end

指定控制器下布局的各种方法:

  • 在下面的代码中,在用户控制器的索引和显示操作下调用应用程序_1布局,并为其他操作调用应用程序布局(默认布局)

    class UsersController < ApplicationController
      layout "application_1", only: [:index, :show]
    end
    
    class UsersController
  • 在下面的代码中,为用户控制器的所有操作调用应用程序_1布局

    class UsersController < ApplicationController
       layout "application_1"
    end
    
    class UsersController
  • 在下面的代码中,仅为用户控制器的测试操作调用应用程序_1布局,并为所有其他操作调用应用程序布局(默认)

        class UsersController < ApplicationController
          def test
            render layout: "application_1"
          end
        end
    
    class UsersController

  • 精度:

    你在上面看到的不是一种真正的干方式,而是一种精确的方式:布局需要在变量之后才能工作(“@some”)。作为:

    而不是:

    def your_action
       render layout: "your_layout"
       @some = foo
       @foo = some
    end
    
    如果你做了一件事。。。这也行不通


    希望有帮助。

    太好了,谢谢。如果有人想用一行代码做更简单的事情,下面的方法是可能的。它易于阅读并放置在控制器顶部。--<代码>布局程序新建{['index','new','create']。包括?(操作名称)?'some_layout':'other_layout'}
    如果不同的布局分别使用不同的css和js文件,这会对应用程序性能产生很大影响吗?-1:太复杂了。下面的评论()是最好的选择。谢谢!这在Rails4.2中仍然是一个问题,可能只有在多个级别使用继承控制器时才会出现。我以前使用过这个方法,但现在遇到问题时没有考虑测试它,再次感谢。@dimitko不,不是,我已经在问题本身中引用了这个解决方案。如果您想使用3种或更多不同的布局(这正是我的情况),它就不起作用了。Rails 2的文档:(另外,我发布了指南以帮助未来的读者。我毫不怀疑您的问题在很久以前就解决了;-)对我来说,这是更灵活的答案。通过将
    layout“[…]”应用于控制器类,只允许有效地执行一条语句。如果您要处理两个以上的布局(例如,管理员、通用应用程序、定制应用程序),您将遇到
    Render和/或redirect在此操作中多次被调用`错误;你别无选择,只能使用这个建议。这个答案是最好的,它简单而简洁,而不是使用内部带有switch或if语句的方法。它还可以指定erb文件和布局:
    format.html{render'custom_index',layout'application'}
    以同样的方式,问题在于,您无法访问诸如当前用户之类的对象来有条件地确定layout@AndrewK动态选择布局似乎不是问题的一部分。如果你们中的任何人阅读了问题,就会知道这不是正确的答案,正如我已经在问题本身中描述了这个解决方案,以及为什么它在我的案例(3个或更多布局)中不起作用。正如mrbrdo所说,这不是答案。他的问题特别指出
    (我在同一个控制器中使用3种或更多不同的布局)
    。这个答案允许有布局和无布局,而不是不同的布局。
    class UsersController < ApplicationController
      layout "application_1", only: [:index, :show]
    end
    
    class UsersController < ApplicationController
       layout "application_1"
    end
    
        class UsersController < ApplicationController
          def test
            render layout: "application_1"
          end
        end
    
    def your_action
       @some = foo
       render layout: "your_layout"
    end
    
    def your_action
       render layout: "your_layout"
       @some = foo
       @foo = some
    end