Никогда не представляйте расположение в ответ на xhrs

Большую часть времени я не хочу представлять расположение, когда запрос прибывает из Ajax. С этой целью я писал render :layout => !request.xhr? часто в моих действиях контроллера.

Как я могу сделать это значением по умолчанию? Т.е. я хотел бы смочь записать

def new
  Post.find(params[:id])
end

и имейте функциональность быть

def show
  Post.find(params[:id])
  render :layout => !request.xhr?
end

(Все хорошо вручную определение расположения в редких случаях, в которых я хочу использовать тот.)

12
задан Tom Lehman 15 March 2010 в 03:07
поделиться

2 ответа

Как насчет этого?

class UsersController < ApplicationController
  layout proc {|controller| controller.request.xhr? ? false : "application" }
end
11
ответ дан 2 December 2019 в 19:53
поделиться

Обычный 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

Установите макет при вызове рендеринга, чтобы его переопределить. Немного некрасиво, но должно работать.

1
ответ дан 2 December 2019 в 19:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: