1

我试图弄清楚如何从定制的响应器中设置布局。我想使用request.xhr?将渲染的布局设置为“ajax”。有人知道该怎么做吗?我正在使用 Rails 3,我有一个这样的响应器:

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

在我看来,响应者是完成这种“ajax”布局切换的最佳方式。

4

2 回答 2

1

我不同意响应者是要走的路。这是我在大多数项目中使用的一个简单的解决方案(但是我只是将 ajax 布局设置为 nil):

在 application_controller.rb

layout :set_layout

def set_layout
  request.xhr? 'ajax' : 'application'
end
于 2010-11-21T06:19:07.703 回答
0

你可以简单地这样做:

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
于 2017-12-08T06:52:38.597 回答