Ruby on Rails布局......除了bug之外

Ton*_*ony 12 layout ruby-on-rails

我有一个具有以下布局逻辑的控制器

layout 'sessions', :except => :privacy
  layout 'static', :only => :privacy
Run Code Online (Sandbox Code Playgroud)

问题是Rails似乎忽略了第一行代码,并且布局"会话"不适用于任何操作.它只是认为为隐私呈现静态布局而其余部分没有布局.

有人知道怎么修这个东西吗?

gtd*_*gtd 25

这不起作用的原因是因为每个控制器只能有一个全局布局声明.在:only:except条件仅仅是应该得到指定的布局行动,并已排除没有得到布局呈现的那些区别.换句话说,布局声明始终会影响使用默认渲染的所有操作.

要覆盖您,只需在操作中执行以下示例之一时指定布局:

render :layout => 'static'
render :action => 'privacy', :layout => 'static'
render :layout => false # Don't render a layout
Run Code Online (Sandbox Code Playgroud)

  • 这是一个比所描述的案例更好的解决方案. (3认同)

JRL*_*JRL 11

另一个选择是为布局调用定义一个方法,如下所示:

layout :compute_layout
Run Code Online (Sandbox Code Playgroud)

然后

def compute_layout
  action_name == "privacy" ? "static" : "sessions" 
end
Run Code Online (Sandbox Code Playgroud)

但是,当您想要根据某些运行时参数(如设置的变量)确定运行时的布局时,这实际上非常有用.在您的示例中,似乎没有必要.