Не удается заставить UJS работать в Rails 3.1 - PullRequest
5 голосов
/ 19 сентября 2011

Хорошо, я уже давно использую ajax в своих приложениях rails.Так или иначе, в моем первом приложении на Rails 3.1 я не могу заставить работать основы ...

# application.js
//= require jquery
//= require jquery_ujs

# the form
= form_for @signup, :url => '/signup', :remote => true do |f|
    = f.text_field :email, :class => 'email', :size => 26
    = f.submit 'Notify me'

# the controller
def signup        # route.rb has 'match '/signup' => 'controller#signup'
  respond_to do |format|
    format.js
  end
end

# view: signup.js.erb
alert('wtf?');

Теперь, насколько я могу судить, отправка этой формы должна вызвать окно с предупреждением.Это не так.Отправка формы проходит через действие контроллера, которое отображает шаблон:

Rendered teaser_pages/signup.js.erb (0.1ms)
Completed 200 OK in 8ms (Views: 7.2ms | ActiveRecord: 0.0ms)

Только не запускается js.

Помощники UJS загружены и работают, хотя (я думаю), потому что если я сделаю ..

link_to 'click me', '#', :confirm => 'confirmation box!'

.., это вызовет окно подтверждения, как и ожидалось.

Чего мне не хватать?Будем благодарны за любое направление.

Спасибо, Эрвин

ОБНОВЛЕНИЕ:

Так что кажется, что rails доказывает неправильный тип контента взаголовок, предоставляющий text/html вместо text/javascript.Даже после некоторого тестирования:

render :js => "alert('AHAHAHAHA');", :content_type => 'text/javascript'

по-прежнему будет отображать заголовок с типом содержимого text/html

Когда я запускаю новое приложение с той же версией jquery-rails, оно работает.В этом приложении это не ..

Куда мне смотреть?

1 Ответ

1 голос
/ 20 декабря 2011

У меня такая же проблема. Я настроил тестовое приложение с тем же gemfile и получил тот же результат, что вы описали: оно работает во вновь созданном приложении, но не в старом. В настоящее время я устанавливаю заголовок типа содержимого вручную перед фактическим вызовом рендеринга.

respond_to do |format|
  headers["Content-type"] = 'text/javascript'
  format.js { render "the_template" }
end

Это, с другой стороны, не изменило правильно доставленный content_type:

respond_to do |format|
  format.js { render "the_template", :content_type => 'text/javascript' }
end

Надеюсь, это поможет на данный момент.

Тем временем вы получили реальное решение?

UPDATE:

По крайней мере, я нашел свою настоящую проблему. У меня есть before_filter, заставляющий content_type к text / html, который я добавил для тестирования некоторое время назад и забыл деактивировать:

def set_header
response.headers["Content-Type"] = "text/html; charset=utf-8"
end
...