2012-07-26 12 views
6

stavo seguendo questo how-to su How To: Allow users to sign in using their username or email address e hanno tutti i passaggi dettagliati lì, ma quando provo a registrarsi tramite il modulo di registrations/new.html.erb ottengo questo errore:"Email non può essere vuoto" Elaborare utilizzando nome utente o email

Email can't be blank 

Nel mio modello ho:

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

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

attr_accessor :login 
attr_accessible :login 

e

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 

qualche consiglio con questo problema?

======= UPDATE

ho trovato qualcosa qui ■[rails]How to use Devise and Rails , without EMail qui è qualcosa di simile:

# Email is not required 
    def email_required? 
    false 
    end 

Con quello aggiunto nel mio modello posso creare un record con nome utente e lasciando il e-mail campo vuoto, ma quando cerco di creare un secondo record senza e-mail al database sorge un errore:

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

Dovrei usare questo, rimuovere l'indice dal mio tabella nel database e basta validare lo username nel modello? perché non ho davvero bisogno del campo email su quel modello.

+0

Mr_Nizzle, si può accettare il modo più sexy? – asiniy

risposta

12

Aggiornamento

risposta di Asiniy sotto in realtà funziona come un fascino (:?

originale (che conosceva)

Il tuo problema è l'indice sul tavolo mysql, si potrebbe rimuovere dalle tue migrazioni, ma non sono sicuro che risolverà il tuo problema. Non usare l'e-mail in Devise è complicato, suggerirei una soluzione alternativa come una e-mail falsa sullo username, qualcosa come questo

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

Non è molto pulito ma vedo escogitare fare qualcosa di simile per le password quando si utilizza omniauth.

Rails 4 e parametri forti

ho avuto in questo problema per username a rotaie 4, e ho dovuto configurare i parametri consentiti come sotto per 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, cosa hai offerto, perfavore vedi la soluzione migliore – asiniy

+0

Grazie enorme aiuto! –

+0

Grazie a @NathanBertram, solo curioso, hai provato la soluzione più semplice di sotto di @asiniy? – ecoologic

Problemi correlati