Это на самом деле меня немного удивило, и мне пришлось проверить источник. Ответ - нет, по умолчанию он не должен соответствовать макету приложения. Вместо этого переданные условия используются для определения, имеет ли действие макет для всех , отсюда и имя смешанного метода action_has_layout? (Rails 3).
Я бы наполовину ожидал, что он будет вести себя как respond_to
, который можно вызывать несколько раз, чтобы создать условия для различных действий.
В любом случае вы можете легко справиться с этим, отправив метод в layout
, содержащий вашу логику (через метод proc или метод ссылки на символы), вместо того, чтобы определять пустое действие просто для визуализации другого макета.
Например:
layout :determine_layout
...
def determine_layout
# show gets application, the rest get admin
params[:action] == 'show' ? 'application' : 'admin'
# or, returning true would probably do it (and be more flexible in case
# the rest of your app swapped layouts to something other than application)
params[:action] == 'show' || 'admin'
end