Ruby on Rails layouts... кроме и только ошибка
У меня есть контроллер со следующей логикой компоновки
layout 'sessions', :except => :privacy
layout 'static', :only => :privacy
Проблема в том, что Rails, похоже, игнорирует первую строку кода, а макеты "сеансы" не применяются для каких-либо действий. Он просто думает сделать статический макет для обеспечения конфиденциальности и без макета для остальных.
Кто-нибудь знает, как это исправить?
Ответы
Ответ 1
Другим вариантом является определение метода для вашего вызова макета, например:
layout :compute_layout
а затем
def compute_layout
action_name == "privacy" ? "static" : "sessions"
end
Однако это действительно полезно, когда вы хотите определить макет во время выполнения на основе некоторого параметра времени выполнения (например, заданной переменной). В вашем примере это не кажется необходимым.
Ответ 2
Причина, по которой это не работает, состоит в том, что для каждого контроллера может быть только одно глобальное объявление. Условия :only
и :except
просто различают действия, которые должны получить указанный макет, и те, которые исключены, получают рендеринг без макета. Другими словами, объявление макета всегда влияет на все действия, которые используют рендеринг по умолчанию.
Чтобы переопределить, вы просто указываете макет, когда вы выполняете как один из следующих примеров внутри действия:
render :layout => 'static'
render :action => 'privacy', :layout => 'static'
render :layout => false # Don't render a layout
Ответ 3
Вы можете просто указать layout :static
, где он вам нужен.