Ruby on rails rails-在渲染时动态更改视图文件名

Ruby on rails rails-在渲染时动态更改视图文件名,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,在我的应用程序中,我大量使用AJAX视图。与用户注册页面一样,它也是一个AJAX请求的弹出窗口。然而,这种方法不利于搜索引擎优化,因为谷歌不能索引“弹出窗口”,显然你不能永久链接弹出页面 因此,我想做的是在渲染之前有一个类似回调的,如果请求是基于ajax的,我可以动态地将.xhr附加到我的视图名称中。这将是很好的保持干燥,而不是必须编码到每个控制器 手动执行此操作的示例如下: def new render request.xhr? ? 'new.xhr' : 'new' end 你知道如何

在我的应用程序中,我大量使用AJAX视图。与用户注册页面一样,它也是一个AJAX请求的弹出窗口。然而,这种方法不利于搜索引擎优化,因为谷歌不能索引“弹出窗口”,显然你不能永久链接弹出页面

因此,我想做的是在渲染之前有一个类似回调的
,如果请求是基于ajax的,我可以动态地将
.xhr
附加到我的视图名称中。这将是很好的保持干燥,而不是必须编码到每个控制器

手动执行此操作的示例如下:

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

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

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

private

  def _process_options options
    options[:template] += '.xhr' if request.xhr?
    super options
  end
这在Rails 3中运行良好,在Rails 2中,您可以通过覆盖
default\u template\u name
方法来实现类似的功能,如:

private

  def default_template_name
    super + if request.xhr? then '.xhr' else '' end
  end

为什么不使用new.js.erb呢?它会自动选择js.erb作为AJAX或js,而new.html.erb作为HTMLB,因为它是html内容。不是JavaScript内容。