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

时间:2012-08-20 09:20:09

标签: ruby-on-rails ruby-on-rails-3

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

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

手动完成此操作的示例如下:

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

如果不重新编写我的每一个控制器,都知道如何实现这一目标?

1 个答案:

答案 0 :(得分: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