我正在尝试设置一个基于ajax的网站,在给定GET变量和HTTP标头的特定组合时加载网页的片段。
GET /normal/html/page?ajax=true
X-ajax: true
我在控制器中设置的是:
before_filter do |controller|
if request_by_ajax?
ApplicationController.layout false
end
end
这样可行,但仅限于开发模式。您看到当我尝试访问给定页面时,它只提供碎片(无布局)页面。
在没有ajax的情况下访问普通页面时:
GET /normal/html/page
这只返回该页面的视图,而不是它周围的布局。但是如果我在重新加载web服务器时访问该页面,那么它将返回布局,当它通过AJAX访问后,它将返回布局+视图。显然这里有一个缓存问题。
我真的想保持页面的相同路线。如果有一个ajax调用,那么我宁愿根据查询字符串和请求标头值找出响应。但是rails在服务文件时更喜欢将查询字符串参数和请求标题分类为无意义(即/ normal / html / page和/ normal / html / page?ajax = true)返回相同的实际模板文件(这是我假设的)。 / p>
知道怎么解决这个问题吗?
答案 0 :(得分:1)
我想出了这个问题。
事实证明,必须在应用程序控制器的早期定义布局调用:
---- application_controller.rb
layout :choose_layout
def choose_layout
if request_by_ajax?
false
else
'application'
end
end
像魅力一样。