2013-12-18 31 views
0

我有一個用戶模型,在該模型中我有角色(admin和general)。我正在使用Devise https://github.com/plataformatec/devise和CanCan https://github.com/ryanb/cancanRails:一個用戶模型,但在註冊時需要不同的信息

admin在註冊時創建主帳戶,然後可以註冊其他用戶並編輯他們的帳戶。這工作。

最後,我改變了它,以便用戶可以使用他們的用戶名登錄,而不是電子郵件,因爲電子郵件對於一般用戶來說不是必需的。

我目前的(主要)註冊表格(僅供管理員使用)需要以下信息:名字;姓氏:電子郵件;用戶名和密碼。我知道,我必須驗證某些字段,並使用戶名和電子郵件是唯一的。我都知道該怎麼做。

用戶模型

validates :username, :email, :password, presence: true 

DB MIGRATE

add_index :users, :email, :unique => true 

我的問題是,當管理創建了其他用戶的郵件是不適用的,也是我想包括附加領域。由於電子郵件不是必需的,並且由於我使用的是單一用戶模型,因此驗證該字段或使其唯一不起作用。或者我不認爲它會起作用?

如果我不想分開模型是他們的另一個方向,我可以通過這個方法來解決問題。我在考慮兩種註冊表格 - 但仍然存在驗證和唯一性問題。

任何指導,將不勝感激。

回答

0

你有沒有考慮在應用程序控制器的方法創建出象這樣的用戶:

def create_new_user 
    u = User.create(:email => "guest_#{Time.now.to_i}#{rand(99)}@example.com", :password => params([:password]), :username => params([:username])) 
    u.save! 
end 

您可以創建一個表單,管理員可以用它來獲取用戶名和你需要這個方法的任何其他參數。

或者,您可以生成設計視圖並對其進行自定義以滿足您的需求。

rails generate devise:views 

然後可以移動:email成隱藏字段(它仍然是本等通過驗證)的形式,並隨機設置它像上面。這將處理獨特的問題。你也可以添加其他屬性,如你想要的。

請記住,如果您希望在作爲設計資源登錄時創建Devise資源,則必須在註冊控制器中自定義一些內容。

設計有自定義視圖的一些很好的信息。https://github.com/plataformatec/devise

+0

settheline:感謝您的反饋意見 - 我傾向於創建單獨的設計視圖 - 但電子郵件的問題仍然是困擾我的一個問題---不幸在昨晚考慮後 - 雖然我不想做到這一點 - 我沒有看到我有兩個獨立的模型 - 我想我希望有一個Hale Mary - 如果我走「僞造」電子郵件的路線,一切都變得雜亂無章 - 我想在漫長的運行我會踢自己 - 所以除非其他人有另一種選擇,我將不得不將其添加到我的成長列表---一步向前走兩步--- – user1648020

+0

我不知道如何有一個額外的列在您的用戶table:'email'實際上會比分成兩個模型更加複雜或複雜,但是你會比我更瞭解你的應用程序。(;祝你好運。 – settheline

+0

有額外的列不是問題,現在我已經有了 - 我不清楚 - 但是如果我走你的路線 - 那個專欄將會有「真實」的電子郵件給管理員,給其他用戶「僞造」電子郵件 - 你不認爲這可能會導致問題還是你認爲我過度思考?我知道有時候會這樣做 – user1648020

相關問題