Rails 3 Layout + Querystring问题

时间:2010-10-21 03:00:01

标签: ruby-on-rails ruby ajax http caching

我正在尝试设置一个基于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>

知道怎么解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我想出了这个问题。

事实证明,必须在应用程序控制器的早期定义布局调用:

---- application_controller.rb
layout :choose_layout

def choose_layout
  if request_by_ajax?
    false
  else
    'application'
  end
end

像魅力一样。