Rails条件布局:为什么":for"作为布局方法的选项?

bra*_*njp 4 templates ruby-on-rails

在我的控制器中,我正在使用 layout 'application', :only => :edit

但我注意到它layout 'application', :for => :edit也有效.

只是好奇,因为docs只提及:only&:except.我无法:for在任何文档中明确找到该layout方法.

Rails v2.3 - 布局(railsapi.com)

Rails v3.1 - 布局(apidock.com)

Dyl*_*kow 10

正如我上面评论的那样,Rails忽略了你的:for参数,应该只对所有动作使用'application'布局.

就渲染多个布局而言,layout ...您的控制器似乎只能有一条线; 如果你有倍数,它只会使用最后一个.如果最后一个有一个:only:except参数,它应该回退到application所有其他动作的布局.如果它没有正确使用application布局和渲染而没有任何布局,请确保以前的开发人员没有layout nil在控制器/应用程序中放置某些内容.

如果您想在控制器内部处理多个布局,您也可以尝试这样做:

class UsersController < ApplicationController
  layout :choose_layout

  def choose_layout
    if action_name == "edit"
      "application"
    else
      "login"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)