В одном из моих контроллеров я хочу изменить макет, учитывая некоторые условия, и в противном случае сохранить макет по умолчанию, используемый родительским ApplicationController (было «приложение» изначально, но сейчас я пытаюсь сделать некоторые другие). Пробовал доступ к «макету» с помощью alias_method, но он, похоже, не работает. Мой код:Как получить доступ к «макету» родительского контроллера?
class SomeController < ApplicationController
alias_method :parent_layout, :layout
layout :some_layout
def some_layout
if some_condition
"new_layout"
else
:parent_layout
end
end
end
Это дает ошибку:
ActionController::RoutingError (undefined method `layout' for class `SomeController'):
app/controllers/some_controller.rb:6:in `alias_method'
app/controllers/some_controller.rb:6:in `<class:SomeController>'
app/controllers/some_controller.rb:3:in `<top (required)>'
Thanks @alexcavalli. Не уверен, что это решает мою проблему. Первый предложенный вами вариант предоставляет явный файл макета для каждого случая условия. То, что я хочу сделать, это предоставить его только при некоторых условиях и в противном случае использовать его из базового класса. Это может быть «приложение», или это может быть что-то еще, что было указано в методе «макета» (или переменной) ApplicationController. Я не хочу дублировать его здесь. Как я могу заменить «приложение» выше на макет из базового ApplicationController (который может иметь свои собственные условия и т. Д., Я думаю)? – shaimo
@shaimo посмотрю. В таком случае, возможно, последний будет работать? Кажется, что (я его не тестировал) он использовал бы родительский макет, если вы не установите явный макет в вызове 'render'. Хотя это может привести к некоторому беспорядку, если вам придется вставить «макет рендеринга:« new_layout »' во многих методах. – alexcavalli