1

在我的应用程序中,我大量使用了 AJAX 视图。就像用户注册页面是 AJAX 请求的弹出窗口一样。然而,这种方法对 SEO 不友好,因为 google 无法索引“弹出窗口”,而且显然您无法永久链接弹出页面。

所以我想要做的是有一个类似的回调,如果请求是基于 ajax 的before_render,我可以动态地附加到我的视图名称。.xhr保持这个 DRY 并且不必将它编码到每个控制器中会很好。

如何手动完成此操作的一个示例是:

def new
  render request.xhr? ? 'new.xhr' : 'new'
end

知道如何在不重写我的每一个控制器的情况下实现这一点吗?

4

1 回答 1

2

设法找到解决方案。在跟踪渲染调用后,我发现实现这一目标的最简单方法是将以下内容添加到您的ApplicationController

private

  def _process_options options
    options[:template] += '.xhr' if request.xhr?
    super options
  end

这在 Rails 3 中运行良好,在 Rails 2 中,您可以通过覆盖以下default_template_name方法来实现类似的效果:

private

  def default_template_name
    super + if request.xhr? then '.xhr' else '' end
  end
于 2012-08-20T10:09:28.533 回答