Большую часть времени я не хочу представлять расположение, когда запрос прибывает из Ajax. С этой целью я писал render :layout => !request.xhr?
часто в моих действиях контроллера.
Как я могу сделать это значением по умолчанию? Т.е. я хотел бы смочь записать
def new
Post.find(params[:id])
end
и имейте функциональность быть
def show
Post.find(params[:id])
render :layout => !request.xhr?
end
(Все хорошо вручную определение расположения в редких случаях, в которых я хочу использовать тот.)
Как насчет этого?
class UsersController < ApplicationController
layout proc {|controller| controller.request.xhr? ? false : "application" }
end
Обычный after_filter не будет работать, потому что мы хотим изменить рендеринг.
Как насчет взлома рендера?
class ApplicationController < ActionController::Base
private
def render(options = nil, extra_options = {}, &block)
options = {:layout => !request.xhr?}.merge(options) unless options.nil?
super(options, extra_options)
end
end
Установите макет при вызове рендеринга, чтобы его переопределить. Немного некрасиво, но должно работать.