#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. именно так все и было. Спасибо за вашу помощь.