Я пытаюсь заставить RJS-код, написанный на прототипе и Rails 2.3.11, работать в Rails 3.2.1
У меня есть гем prototype-rails
, поэтому render :update do |page|
работает, я использую форму с :remote => true
, которая отправляет ajax-запрос в контроллер, и javascript выглядит так, как будто он генерируется нормально.
Однако тип содержимого в заголовке ответа - text/html; charset=utf-8
, который должен быть text/javascript
.
В контроллере я называю это так:
render :update do |page|
if @step.errors.empty?
page.redirect_to how_to_path(@article.id)
else
page.replace_html 'add_step_form', :partial => 'how_to/add_step', :locals => {:step => @step, :altered => true}
end
end
Кажется, что сгенерирован код window.location.href...
и Element.update...
, но он не выполняется из-за неправильного типа содержимого.
Есть ли что-то, что я могу делать неправильно, что может вызвать это? Мне нужно решение, которое сделает RJS с прототипом работы. JQuery, вероятно, будет использоваться в будущем, но сделать это изменение сейчас не вариант.
Обновление:
Я попробовал несколько других способов написания кода, в том числе указав :content_type => "text/javascript"
в render
, обернув его в блок respond_to
с format.js
, и переписав его как файл js.erb
, но все по-прежнему возвращаются с text/html
в качестве типа содержимого в заголовке ответа.
обновление
Я как-то понял, как получить ожидаемое поведение, добавив headers["Content-Type"] = "text/javascript; charset=utf-8"
в контроллер до render
, но на самом деле это не самый лучший способ сделать это, если мне нужно добавить это явно перед каждым экземпляром RJS. Я бы хотел более чистое решение, если бы кто-нибудь смог его найти.
обновление
Оказывается, перед каждым запросом before_filter
выполнялся тип содержимого text / html. Я удалил это и смог удалить весь добавленный код headers["Content-Type"]
. Это работало в моей среде разработки, но не в нашей среде проверки тестирования. Оказалось, что у нас там были кэшированы старые ресурсы, поэтому проверка выполнялась с прототипом 1.6.1, а в моей локальной среде разработки была 1.7.0. Это заставило rails.js
не скомпилироваться при проверке, поэтому все запросы имели Accepts: text/html
вместо text/javascript
. Очистка этого кэша загрузила более новую версию прототипа и устранила проблему.