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