2012-07-26 18 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 

किसी भी सलाह इस समस्या के साथ?

# Email is not required 
    def email_required? 
    false 
    end 
कि अपने मॉडल में जोड़ा साथ

मैं उपयोगकर्ता नाम के साथ रिकॉर्ड बना सकते हैं और छोड़ने:

======= अद्यतन

मैं इसे की तरह कुछ है यहाँ कुछ ■[rails]How to use Devise and Rails , without EMail यहां पाया ईमेल क्षेत्र को खाली है, लेकिन डेटाबेस एक त्रुटि बढ़ जाता है जब मैं ईमेल के बिना एक दूसरे रिकॉर्ड बनाने के लिए प्रयास करें:

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

मैं इस का उपयोग करना चाहिए, से सूचकांक को दूर मेरी डेटाबेस में तालिका, और मॉडल में username मान्य करें? क्योंकि मुझे उस मॉडल पर वास्तव में ईमेल फ़ील्ड की आवश्यकता नहीं है।

+0

Mr_Nizzle देखें, क्या आप अधिक कामुक तरीके से स्वीकार कर सकते हैं? – asiniy

उत्तर

12

अद्यतन

वास्तव में नीचे Asiniy का जवाब एक आकर्षण (तरह काम करता है:

मूल (जो जानता था)

आपकी समस्या mysql मेज पर सूचकांक है, तो आप समाप्त हो सकती हैं यह आपके माइग्रेशन से है, लेकिन मुझे यकीन नहीं है कि आपकी समस्या का समाधान होगा। डेविस में ईमेल का उपयोग करना मुश्किल नहीं है, मैं username से नकली ईमेल की तरह कामकाज का सुझाव दूंगा, इस तरह की

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

यह बहुत साफ नहीं है लेकिन जब आप omniauth का उपयोग करते हैं तो मैं पासवर्ड के लिए कुछ ऐसा करने के लिए तैयार हूं।

रेल 4 और मजबूत पैरामीटर

मैं रेल 4 में 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

ओएमजी, आपने क्या पेशकश की, कृपया बेहतर समाधान देखें – asiniy

+0

धन्यवाद बहुत बड़ी मदद! –

+0

धन्यवाद @ नाथनबर्ट्राम, बस उत्सुक, क्या आपने @asiniy से नीचे दिए गए सरल समाधान का प्रयास किया? – ecoologic

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^