Ruby on rails rails-在渲染时动态更改视图文件名
在我的应用程序中,我大量使用AJAX视图。与用户注册页面一样,它也是一个AJAX请求的弹出窗口。然而,这种方法不利于搜索引擎优化,因为谷歌不能索引“弹出窗口”,显然你不能永久链接弹出页面 因此,我想做的是在渲染之前有一个类似回调的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的,我可以动态地将.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内容。