Регистрационная форма Rails не сохраняется - PullRequest
2 голосов
/ 19 октября 2011

У меня возникла проблема с сохранением формы регистрации с помощью Devise.Я использую рельсы 3.1.1, ruby ​​1.9.2 и устройство 1.4.8.Кроме того, я использую mongoid 2.3.2.

user.rb

class User
include Mongoid::Document
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

#fields in addition to Devise fields.
field :name
field :display_name
    index :display_name, :unique=>true
field :gender
field :website
field :about

#referenced documents
has_many :accomplishments
has_many :projects
has_many :ranks

#self reference for followers and followees
references_and_referenced_in_many :followees, :class_name=>"User", :inverse_of=>:followers
references_and_referenced_in_many :followers, :class_name=>"User", :inverse_of=>:followees

#validations
validates_uniqueness_of :display_name, :message=>"Display name already exists.", :allow_nil=>true
validates_presence_of :name, :message=>" is required"

attr_accessible :email, :password, :password_confirmation, :name
end

И моя форма регистрации также довольно проста.

/ views / devise /registrations / new.html.erd

<h2>Sign up</h2>

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>
    <p>
        <%= f.label :email %>
        <div class="input">
            <%= f.email_field :email %>
        </div>
    </p>
    <p>
        <%= f.label :password %>
        <div class="input">
            <%= f.password_field :password %>
        </div>
    </p>
    <p>
        <%= f.label :confirmation %>
        <div class="input">
            <%= f.password_field :password_confirmation %>
        </div>
    </p>
    <p>
        <%= f.label :name %>
        <div class="input">
            <%= f.text_field :name %>
        </div>
    </p>
    <br/>
  <p><%= f.submit "Sign up", :class => "btn primary"  %></p>
<% end %>

<%= render :partial => "devise/shared/links" %>

Моя проблема заключается в том, что при отправке я не получаю ошибок, и флэш-память сообщает мне, что я успешно зарегистрировался.Но когда вы просматриваете коллекцию пользователей в Монго, никаких документов не существует.Я попытался сделать так, чтобы мои пользователи моделировали довольно голые кости и соответственно изменили страницу регистрации, и все же в итоге получили тот же результат.У меня заканчиваются идеи о том, что искать, чтобы определить, почему запись не сохраняется.Есть какие-нибудь мысли о том, что может пойти не так?

Также, если понадобится больше деталей или лучшее объяснение проблемы, я более чем рад продолжить погружение.Ударить кирпичную стену о том, что нужно проверить, чтобы решить проблему.

Ответы [ 2 ]

1 голос
/ 21 октября 2011

Нашел проблему.Очевидно, что некоторые документы в моей коллекции пользователей противоречили проверке адреса электронной почты, который я пытался отправить.Документ в коллекции был введен вручную, но не содержал того же адреса электронной почты, на который я пытался зарегистрировать нового пользователя.Я полагаю, что позволить devise обрабатывать все пользовательские создания было бы хорошим эмпирическим правилом, чтобы не допустить возникновения этой ошибки в будущем.существует, создается ли разработчиком или вручную, регистрация, похоже, не удалась.

ВНОВЬ РЕДАКТИРОВАТЬ

Проблема в том, что в предыдущей разработке были установлены индексы, которые не соответствовалибыло заявлено в модели.Поскольку mongoid не отменяет предыдущие объявления, индекс все еще существует и выдает исключение внутри mongo.Почему это не бросило исключение в приложении, мне не под силу.Пришлось использовать db.system.profile.find () для просмотра журнала.

0 голосов
/ 20 октября 2011

Поэтому, когда вы делаете подобные вещи с Devise, часто случается, что ошибки, препятствующие сохранению модели, прячутся где-то по пути. Я рекомендую попробовать User.save! в контроллере, поскольку это часто выявляет ошибки, которые User.save скрывает, когда вы делаете это с Devise. Обычно старайтесь добавлять удары повсюду и посмотрите на консоль, почти наверняка это скрытая ошибка.

...