Rails 3 Layout + Querystring Проблема - PullRequest
       7

Rails 3 Layout + Querystring Проблема

1 голос
/ 21 октября 2010

Я пытаюсь настроить веб-сайт на основе 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) возвращают тот же фактический файл шаблона (это то, что я предполагаю).

Есть идеи, как обойти это?

1 Ответ

1 голос
/ 21 октября 2010

Я разобрался с проблемой.

Оказывается, вызов макета должен быть определен в самом начале в контроллере приложения:

---- application_controller.rb
layout :choose_layout

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

Работает как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...