2011-10-19 4 views
2

Deviseを使用してサインアップフォームを保存する際に問題が発生しました。私はレール3.1.1、ルビー1.9.2を使い、1.4.8を考案しています。また、私はmongoid 2.3.2を使用しています。Railsサインアップフォームが保存されない

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" %> 

私の問題は、私が提出したときに、私はエラーを取得していないと、フラッシュは私が正常にサインアップした私に語ったということです。しかし、あなたがmongoのユーザーコレクションを見ても、ドキュメントは存在しません。私は自分のユーザーをかなり素朴な骨にして、それに応じてサインアップページを修正して、同じ結果を得ようとしました。私は、レコードが保存されていない理由を調べるために何を探すべきかに関するアイディアが不足しています。何が間違っている可能性があるかについてのあらゆる考え?

さらに詳しい情報が必要な場合や、問題の詳細な説明が必要な場合は、さらに深く掘り下げてください。問題を解決するために何をチェックするかについてのレンガの壁に当たってください。

答えて

1

問題が見つかりました。ユーザーのコレクション内の一部のドキュメントが、送信しようとしていた電子メールアドレスの検証と競合していたようです。コレクション内のドキュメントは手動で入力されましたが、新しいユーザーにサインアップしようとしたのと同じ電子メールアドレスは含まれていませんでした。私は、すべてのユーザー作成を処理することを念頭において、このエラーが今後起こらないようにすることをお勧めします。

EDIT

は天気を手動で工夫して作成するか、登録が失敗するようで、任意の文書が存在するかどうかであるように思われます。

EDIT AGAIN

問題は、インデックスがモデルに宣言されたものと一致しなかった以前の開発に設定されたことです。モンゴイドは以前の宣言を撤回していないので、インデックスはまだ存在し、モンゴー内で例外を投げた。なぜこれがアプリに例外を投げかけなかったのかは私の外にある。 db.system.profile.find()を使用してログを監視する必要がありました。

+0

この同じ問題がありました。この動作は開発モードでのみ発生しますか? – emkman

0

Deviseでこの種の処理を行うと、モデルが保存されないようにするエラーが途中で隠れることがよくあります。私はコントローラでUser.save!を試してみることをお勧めします。これは、Deviseでこれらのことを行うときに、User.saveが非表示になることがよくあるためです。一般的には、どこにでもバングを加えて、コンソールを見てください。それは、ほぼ確実に隠されているエラーです。

+0

コントローラは存在しません。私はそれを処理するためにDeviseに依存しているので、私は実際にUser.saveを書くことはしませんでした。別のコントローラに手動でcreate文を書き込んでUser.save!を実行すると、うまく動作します。私はフォームを変更するためにDeviseビューを作成しました。 – griffithben

関連する問題