Более одного макета для контроллера - PullRequest
1 голос
/ 25 марта 2009

Можно ли сделать что-то вроде этого:

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

По какой-то причине моя страница login по-прежнему использует раскладку меню (я могу сказать, потому что строка меню появится вверху). Если я закомментирую третью строку, строка меню исчезнет. Похоже, что оба макета применяются один за другим.

Но если я закомментирую бит layout "generic", я буду просто черно-белым, что означает, что таблица стилей CSS не применяется.

Ответы [ 3 ]

5 голосов
/ 25 марта 2009

Похоже, вы пытаетесь применить разные макеты в разных условиях выполнения. Самый простой способ справиться с этим - использовать ссылку на метод для макета.

Например: -

class ResourceController < ActionController::Base
  layout :choose_layout

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

Проверьте Rails Ссылка API для ActionController :: Layout под заголовком "Типы макета"

1 голос
/ 25 марта 2009

Посмотрите на этот тикет, ваша проблема, похоже, похожа: [http://dev.rubyonrails.org/ticket/8867]

0 голосов
/ 25 марта 2009

Один из способов сделать это на самом деле в ваших действиях.

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

Вы также можете сделать фактический "menubar" html частичным и отключить рендеринг при определенных условиях.

...