Установить макет от респондента?

Я пытаюсь выяснить, как установить макет из пользовательского респондента. Я хочу использовать request.xhr? установить макет для рендеринга в "ajax". Кто-нибудь знает, как это сделать? Я использую Rails 3 и у меня есть такой ответчик:

module AjaxLayoutResponder
  def to_html
    if request.xhr?
      # do something here to change layout...
    end
    super
  end
end

Мне кажется, что респондент - лучший способ выполнить переключение раскладки "ajax".

2 ответа

Решение

Я не согласен с тем, что ответчик - это путь. Вот простое решение, которое я использую в большинстве своих проектов (однако я просто установил макет ajax на ноль):

В application_controller.rb

layout :set_layout

def set_layout
  request.xhr? 'ajax' : 'application'
end

Вы могли бы просто сделать это:

module AjaxLayoutResponder
  def to_html
    if request.xhr?
      options[:layout] = 'ajax'
    end
    super
  end
end

потому что в конце выполнения респондента вызывается:

# from https://github.com/plataformatec/responders/blob/master/lib/action_controller/responder.rb
def default_render
  if @default_response
    @default_response.call(options)
  else
    controller.render(options)
  end
end
Другие вопросы по тегам