Чтобы по умолчанию никогда не отображать макет для любого XHR-запроса, вы можете сделать это:
class ApplicationController < ActionController::Base
layout proc { false if request.xhr? }
end
Когда запрос является запросом XHR, он отображает запрошенное представление без макета. В противном случае он использует поведение макета по умолчанию, которое ищет макет по наследству.
Это отличается от высказывания controller.request.xhr? ? false : 'application'
, поскольку всегда будет отображать макет application
для запроса не-XHR, что эффективно отключает поиск по наследованию.
Также см. Документацию ActionView для аргумента nil
и наследования макета.