2012-07-26 9 views
6

ja po tym jak do na How To: Allow users to sign in using their username or email address i nie wszystkie kroki wyszczególnione tam, ale gdy próbuję zarejestrować poprzez formularz registrations/new.html.erb otrzymuję ten błąd:„e-mail nie może być puste” Opracować użyciu nazwy użytkownika lub e-mail

Email can't be blank 

W moim modelu mam:

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

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

attr_accessor :login 
attr_accessible :login 

i

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 

Wszelkie porady z tym problemem?

======= UPDATE

Znalazłem coś tutaj ■[rails]How to use Devise and Rails , without EMail tutaj jest coś takiego:

# Email is not required 
    def email_required? 
    false 
    end 

z tym dodany w moim modelu mogę utworzyć rekord z nazwą użytkownika i pozostawiając e pole puste, ale gdy próbuję utworzyć drugi rekord bez poczty elektronicznej bazy danych wzrasta błąd:

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

stosować ten, usunąć indeks od mojego tabeli w bazie danych i po prostu sprawdzić poprawność modelu username w modelu? ponieważ tak naprawdę nie potrzebuję pola adresu e-mail w tym modelu.

+0

Mr_Nizzle, czy możesz zaakceptować bardziej seksowny sposób? – asiniy

Odpowiedz

12

Aktualizacja

odpowiedź Asiniy jest poniżej faktycznie działa jak czar (?:

Original (kto wiedział)

Twój problem jest indeksem w tabeli mysql, można usunąć to z twoich migracji, ale nie jestem pewien, czy rozwiąże twój problem. Nie używanie e-maila w Devise jest trudne, sugerowałbym obejście jak fałszywą wiadomość e-mail z username, coś podobnego do tego

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

To nie jest bardzo czyste, ale widzę, jak robię coś podobnego w przypadku haseł podczas korzystania z omniauth.

Szyny 4 i silny Parametry

mam do tego problemu dla username w szynach 4, i musiałem skonfigurować dopuszczalne parametry jak poniżej 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, co zaoferowałeś, proszę zobaczyć lepsze rozwiązanie – asiniy

+0

Dzięki ogromnej pomocy! –

+0

Dzięki @NathanBertram, po prostu ciekawi, czy wypróbowałeś poniższe prostsze rozwiązanie z @asiniy? – ecoologic