2009-10-16 30 views
10

我有一个控制器具有以下布局逻辑Ruby on Rails的布局......除了只有错误

layout 'sessions', :except => :privacy 
    layout 'static', :only => :privacy 

的问题是,Rails的似乎忽略的代码和布局“两会”的第一行是没有申请任何行动。它只是认为为隐私渲染静态布局,其余部分没有布局。

任何人都知道如何解决这个问题?

回答

10

另一种选择是定义一个方法,你的布局呼叫,像这样:

layout :compute_layout 

然后

def compute_layout 
    action_name == "privacy" ? "static" : "sessions" 
end 

但是当你想德国电信这真的是唯一有用的在运行时基于某些运行时参数(如正在设置的变量)来布局布局。在你的例子中,这似乎没有必要。

+0

这是我诉诸于... +1为“action_name”...不知道那 – Tony 2009-10-16 14:27:33

+0

action_name也很容易扔进一个case/when/then block,当你必须处理超过2动作。 – Jared 2009-10-17 02:44:56

2

您可以在需要的地方指定layout :static

23

这不起作用的原因是因为每个控制器只能有一个全局布局声明。 :only:except条件只是区分应获取指定布局的操作和不包含布局的操作。换句话说,布局声明总是影响使用默认呈现的所有操作。

覆盖您只需指定一个布局,当你渲染等的行动中下面的示例之一:

render :layout => 'static' 
render :action => 'privacy', :layout => 'static' 
render :layout => false # Don't render a layout 
+3

这是一个比上述案例所接受的更好的解决方案。 – 2012-01-22 19:56:46