Rails 3.0 form_tag с удаленным неверным заголовком Accept: - PullRequest
2 голосов
/ 29 февраля 2012

Я только что установил проект rails 3.0.3 на новую машину, и у меня странное поведение, связанное с form_tag: remote => true. Кажется, в запросе задан неправильный заголовок Accept, поэтому он поступает не как AJAX / JS-запрос, а скорее как HTML-запрос. На моем производственном сервере заголовок Accept установлен правильно:

Accept:*/*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript

Технические характеристики:

ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-linux]
Rails 3.0.3

Однако на новой машине, которую я настраиваю, это выглядит так:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Технические характеристики:

ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
Rails 3.0.3

Это код для генерации формы (внутри _request.html.erb)

<div id='request-translation'>
  <h2 class="tr-req left"><%= t( 'user.translation_requests.request' ) %></h2>
  <%= form_tag( request_translation_artist_song_path( @artist, @song ),
           :method => :post,
           :remote => true,
           :class => 'left',
           :style => 'margin-left: 20px;' ) %>
    <%= languages_combobox_large( @into_languages, 'language_id' ).html_safe %> 
  </form>
</div>

И, конечно, в моем контроллере я отвечаю только на format.js, но запрос поступает в формате format.html. Я думал: удаленный => правда позаботился об этом. Сгенерированный HTML для формы также выглядит хорошо:

<form accept-charset="UTF-8" action="/xxx/request_translation" class="left" data-remote="true" format="js" method="post" style="margin-left: 20px">

1 Ответ

1 голос
/ 02 марта 2012

Убедитесь, что вы включили jquery.js , а также * jquery_ujs.js * в заголовок HTML.

jquery_ujs отвечает за отправку форм через AJAX, которые установили атрибут data-remote . Поскольку это ненавязчиво, форма будет работать и без этого. Но он отправляется через обычный запрос страницы.

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