【问题标题】:Rails 3 Layout + Querystring ProblemRails 3 布局 + 查询字符串问题
【发布时间】:2011-04-28 09:24:10
【问题描述】:

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

这只会返回该页面的视图,而不是它周围的布局。但是,如果我在重新加载网络服务器时访问该页面,那么它会返回布局,然后当它通过 AJAX 访问时,它会返回布局 + 视图。显然这里存在缓存问题。

我真的很想为页面保持相同的路线。如果有 ajax 调用,那么我更愿意根据查询字符串和请求标头值找出响应。但是 Rails 更喜欢将查询字符串参数和请求标头分类为在提供文件时(即 /normal/html/page 和 /normal/html/page?ajax=true)返回相同的实际模板文件(这是我假设的)。

知道如何解决这个问题吗?

【问题讨论】:

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


    【解决方案1】:

    我发现了问题。

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

    ---- application_controller.rb
    layout :choose_layout
    
    def choose_layout
      if request_by_ajax?
        false
      else
        'application'
      end
    end
    

    像魅力一样工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 2012-09-21
      • 2011-09-04
      • 2011-12-05
      相关资源
      最近更新 更多