Rails не перезагружает сеанс в сообщении ajax

У меня очень странная проблема с Rails и ajax с использованием jQuery (хотя я не думаю, что это специфично для jQuery).

Приложение My Rails использует хранилище сеансов cookie, и у меня очень простой логин, который устанавливает идентификатор пользователя в сеансе. Если user_id не установлен в сеансе, выполняется перенаправление на страницу входа. Это работает без проблем. Запросы JQuery GET тоже работают нормально. Проблема в том, что когда я выполняю jQuery POST - браузер отправляет cookie сеанса в порядке (я подтвердил это с помощью Firebug и сброса request.cookies в журнал), но сеанс пуст, то есть сеанс {}.

Я делаю это в моем application.js:

$(document).ajaxSend(function(e, xhr, options) {
  var token = $("meta[name='csrf-token']").attr('content');
  xhr.setRequestHeader('X-CSRF-Token', token);
});

и вот мой образец сообщения:

$.post('/test/1', { _method: 'delete' }, null, 'json');

, который должен добраться до этого метода контроллера (_method: delete):

def destroy
  respond_to do |format|
    format.json { render :json => { :destroyed => 'ok' }.to_json }
  end
end

Просматривая журнал и используя Firebug, я могу подтвердить, что правильный значение cookie отправляется в заголовке запроса, когда происходит сообщение ajax, но кажется, что в какой-то момент Rails теряет это значение и, следовательно, теряет сеанс, поэтому перенаправляется на страницу входа в систему и никогда не достигает метода.

I ' Я пробовал все, что мог придумать, чтобы отладить это, но я прихожу к мысли, что это может быть ошибка в Rails. Я использую Rails 3.0.4 и jQuery 1. 5, если это поможет. Мне очень странно, что обычные (т.е. не ajax) запросы на получение и отправку работают, а запросы на получение ajax работают без проблем, это просто сообщения ajax, которые этого не делают.

Любая помощь в попытке исправить это будет очень признателен!

Большое спасибо,
Дэйв

61
задан Dave Hollingworth 26 February 2011 в 11:52
поделиться