2012-07-26 163 views
6

我下面這個設計如何,對How To: Allow users to sign in using their username or email address並沒有詳細說明所有的臺階上,但是當我嘗試通過registrations/new.html.erb形式註冊我得到這個錯誤:「電子郵件不能爲空」使用用戶名或電子郵件

Email can't be blank 

在我的模型,我有:

devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

attr_accessible :username, :email, :password, :password_confirmation, :remember_me 

attr_accessor :login 
attr_accessible :login 

def self.find_first_by_auth_conditions(warden_conditions) 
    conditions = warden_conditions.dup 
    if login = conditions.delete(:login) 
     where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first 
    else 
     where(conditions).first 
    end 
    end 

任何意見有這個問題?

======= UPDATE

我發現這裏的東西在這裏■[rails]How to use Devise and Rails , without EMail它是這樣的:

# Email is not required 
    def email_required? 
    false 
    end 

用在我的模型加入我能創造一個記錄用戶名和離開電子郵件領域的空白,但是當我嘗試沒有電子郵件創建第二個記錄的數據庫上升了一個錯誤:

Mysql2::Error: Duplicate entry '' for key 'index_parents_on_email':... 

我應該利用這一點,從刪除索引我表在數據庫中,並且只驗證模型中的username?因爲我真的不需要該模型的電子郵件字段。

+0

Mr_Nizzle,你能接受更性感的方式嗎? – asiniy 2015-04-18 11:57:43

回答

12

更新

低於實際Asiniy的答案就像一個魅力(?:

原件(誰知道)

你的問題是MySQL表索引,你可能會刪除它來自你的遷移,但我不確定這會解決你的問題。在Devise中不使用電子郵件是棘手的,我會建議一個像username這樣的假電子郵件的解決方法,像這樣的

"#{user.username}@fake.me" 

這不是很乾淨,但我看到設計時使用omniauth做類似的密碼。

軌道4個強大的參數

我在軌道4,5鑽進這個問題username,我不得不爲sign_up配置如下允許的參數:

class ApplicationController < ActionController::Base 

    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
     devise_parameter_sanitizer.for(:sign_up) do |u| 
     u.permit :username, :email, :password, :password_confirmation 
     end 
    end 
end 

This is described in Devise Doc

+0

omg,你提供了什麼,請看看更好的解決方案 – asiniy 2014-12-31 16:23:42

+0

感謝巨大的幫助! – 2016-06-27 23:21:46

+0

感謝@NathanBertram,只是好奇,你是否嘗試了@asiniy下面的更簡單的解決方案? – ecoologic 2016-06-28 00:24:45

相關問題