控制器的多个布局

时间:2009-03-25 11:04:39

标签: ruby-on-rails css layout

是否可以做这样的事情:

class SimulationController < ApplicationController
  layout "generic", :only => [:login, :invalid]
  layout "menubar", :except => [:login, :invalid]

出于某种原因,我的login页面仍然使用菜单栏布局(我可以说,因为菜单栏会出现在顶部)。如果我注释掉第3行,菜单栏将消失。所以看起来两个布局都是一个接一个地应用。

但是如果我注释掉layout "generic"位,我将会只是黑白,这意味着没有应用CSS样式表。

3 个答案:

答案 0 :(得分:5)

您似乎在尝试在不同的运行时条件下应用不同的布局。解决此问题的最简单方法是使用布局的方法参考。

例如: -

class ResourceController < ActionController::Base
  layout :choose_layout

  private
    def choose_layout    
      if [ 'signup', 'login' ].include? action_name
        'login_layout'
      else
        'admin_layout'
      end
    end

在“布局类型”标题下查看ActionController :: Layout的Rails API reference

答案 1 :(得分:1)

看看这张票,你的问题似乎很相似: [http://dev.rubyonrails.org/ticket/8867]

答案 2 :(得分:0)

实现此目的的一种方法实际上是在您的行动中。

def login
  render :action => "login", :layout => "generic"
end

你也可以将实际的“菜单栏”html变为局部,并在某些条件下关闭渲染。