2011-10-19 58 views
2

我在使用Devise保存註冊表單時遇到問題。我使用rails 3.1.1,ruby 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

似乎是,如果任何文件存在,通過色器件閹羊創建或手動登記似乎失敗。

再次編輯

的問題是,指數是在以前的發展未用什麼模型聲明匹配設置。由於mongoid沒有收回先前的聲明,該指數依然存在,並在mongo中拋出異常。爲什麼這不會在應用程序中拋出異常超出了我的想象。必須使用db.system.profile.find()來查看日誌。

+0

有這個相同的問題。這種行爲只發生在開發模式中嗎? – emkman

0

所以當你用Devise做這種東西的時候,經常會發生的是,防止模型被保存的錯誤會隱藏在某處。我建議在控制器中嘗試使用User.save!,因爲當您使用Devise執行這些操作時,經常會發現User.save隱藏的錯誤。通常,嘗試在所有地方添加劉海,然後看看控制檯,它幾乎肯定是一個隱藏的錯誤。

+0

雖然控制器不存在。我依靠Devise來處理它,所以我沒有真正寫User.save。如果我在另一個控制器中手動編寫create語句並執行User.save!,則它工作得很好。我只創建了Devise視圖來修改表單。 – griffithben