отправка из формы HAML очищает данные сеанса (Rails3)?

#ruby-on-rails-3 #haml

#ruby-on-rails-3 #haml

Вопрос:

У меня есть следующая модель:

Проект
 - имя: текст
 - описание:текст

И это фрагмент формы, которую я написал на HAML для нового проекта:

%p Создать новый проект:

%form{:method => "post", :action=>"/projects/"}
 %label{:for => "project-name[имя]"} Имя:
 %ввод{:type=>'text', :size=>40, :name=>'projectname', :id=>'project-name'} 
 %br/
 %label{:for => "project-description[описание]"} Описание:
 %textarea{:rows=>'10',:cols=>'10',:name=>'projectdescription',:id=>'project-description'}
 %br/
 %input{:type=>'отправить', :value=>'Создать'}

когда пользователь нажимает кнопку отправки, данные сеанса, похоже, очищаются.

Вот почему я подозреваю это:

  • Я использую omniauth, когда пользователь входит в систему, я устанавливаю session[:user_id] = user.id
  • У меня есть перенаправление в контроллере проекта для обеспечения того, чтобы пользователь всегда входил в систему для всех действий
  • действия index и new обрабатываются должным образом.
  • вместо обработки действия create пользователь перенаправляется на страницу входа (согласно before_filter)
  • Я воспроизвел ту же функциональность с файлами erb, и проблем не возникло. Когда я добавляю новый файл.haml, ошибка появляется снова.

Есть идеи?

Ответ №1:

Я полагаю, что здесь происходит то, что у вас есть `protect_from_forgery’ в вашем ApplicationController, но токен csrf не отправляется приложению. Проверьте, есть ли у вас соответствующий rails.js включено, если это вызов AJAX. И если бы вы использовали form_for, то помощник автоматически вставил бы скрытое поле с токеном csrf.

Комментарии:

1. form_for — это помощник, он выдает предоставленный блок. Я полагаю, это можно использовать и в haml. Сам никогда этим не пользовался, но, похоже, люди используют form_for с haml: haml-lang.com/docs/yardoc /…

2. именно так все и было. Спасибо за вашу помощь.