2014-03-26 53 views
6

我目前正在研究僅在用戶不是學生時需要電子郵件的系統,如果用戶是學生,則需要用戶名。 所以這是我在我的模型做的:Rails 4 and Devise:在某些條件下允許電子郵件空白

class User < ActiveRecord::Base 
    validates :email, presence: true, unless: :student? 
    validates :username, presence: true, if: :student? 
end 

這工作得很好的用戶名屬性,但對於電子郵件,我仍然得到Email cannot be blank錯誤。我想Devise有它自己的電子郵件驗證規則。

我該如何使這項工作,我的意思是覆蓋Devise驗證電子郵件的存在規則?

謝謝

回答

4

設計具有email_required?方法,其可與一些定製邏輯被overrided。

class User < ActiveRecord::Base 
    validates :username, presence: true, if: :student? 

    protected 

    def email_required? 
    true unless student? 
    end 
end 
+0

更具體地說,Devise的'validatable''擴展使用了這個方法,所以通過覆蓋這個方法,你可以獲得對Devise提供的驗證的更精細的控制。您可以避免擴展並自行構建所有驗證。 – sameers

0

我認爲設計使用電子郵件作爲其模型中的關鍵。

add_index :users, :email, unique: true

如果你使用的生成制定遷移,你可以使user_name具有遷移的關鍵。

add_index :users, :user_name, unique: true
remove_index(users, column: users)
change_column :users, :email, :string, :null => true