2012-07-26 24 views
6

estaba siguiendo esta guía sobre cómo How To: Allow users to sign in using their username or email address e hizo todos los pasos que se detallan allí, pero cuando intento registrar a través del formulario registrations/new.html.erb me sale este error:"El correo electrónico no puede estar en blanco" Idear usando nombre de usuario o correo electrónico

Email can't be blank 

En mi modelo que tengo:

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

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

attr_accessor :login 
attr_accessible :login 

y

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 

cualquier consejo con este problema?

======= ACTUALIZACIÓN

he encontrado algo aquí ■[rails]How to use Devise and Rails , without EMail aquí es algo así como:

# Email is not required 
    def email_required? 
    false 
    end 

Con ese añadido en mi modelo que pueda crear un registro con nombre de usuario y dejando el correo electrónico campo en blanco, pero cuando intento crear un segundo registro sin la base de datos de correo electrónico se eleva un error:

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

¿Debo usar esto, quite el índice de mi tabla en la base de datos, y simplemente validar el username en el modelo? porque realmente no necesito el campo de correo electrónico en ese modelo.

+0

Mr_Nizzle, ¿puede usted aceptar una manera más sexy? – asiniy

Respuesta

12

actualización

respuesta de Asiniy a continuación en realidad funciona como un encanto (?:

original (que sabía)

Su problema es el índice de la tabla de MySQL, que puede eliminar de tus migraciones, pero no estoy seguro de que eso resuelva tu problema. No usar el correo electrónico en Devise es complicado, sugeriría una solución como un correo electrónico falso de username, algo así como

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

No es muy limpio, pero creo que se debe hacer algo similar para las contraseñas cuando se utiliza omniauth.

carriles 4 y Parámetros fuertes

me metió en este problema para username en los carriles 4, y tuve que configurar los parámetros permitidos como abajo para 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, ¿qué ofreciste, por favor ver mejor solución – asiniy

+0

Gracias enorme ayuda! –

+0

Gracias @NathanBertram, solo curiosidad, ¿has probado la solución más simple de @asiniy? – ecoologic

Cuestiones relacionadas