2010-09-11 5 views

Odpowiedz

-2

Wystarczy dodać pole nazwę użytkownika do modelu użytkownika i na wiki opracować: http://github.com/plataformatec/devise/wiki/Sign-in-using-login-or-mail

Nadzieję, że to pomaga.

+4

Ten link jest uszkodzony. Być może następnym razem będziesz mógł umieścić niezbędne informacje w swojej odpowiedzi? – Benson

+1

Link przekierowuje teraz na najwyższy poziom wiki produktu Devise. Ponieważ nie wiedziałem, że Wiki jest tam, link był dla mnie pomocny. Prawdopodobnie konkretną odpowiedzią jest teraz https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign_in-using-their-username-lub-email-address, choć jak mówi lashleigh, ten artykuł nie zwraca _validating_ nazwa użytkownika w modelu. –

+0

To po prostu nie działa już w Rails 4. To już nie jest łatwe. – CarlosCervantes

-7

Jak dostosować opracować ... Wszystko jest tutaj: http://railscasts.com/episodes/210-customizing-devise

+7

Korekta jest koniecznością, IMO. Ponadto, jeśli niezbędne informacje są dostępne, możesz je łatwo podać tutaj, tak jak zrobił to lashleigh. RTFM nie jest odpowiedzią. – Benson

+1

Posiadanie bezpośredniego linku do dokładnej, odpowiedniej "instrukcji" (w tym przypadku screencast) z szanowanego źródła jest pomocne. –

+1

Ten problem nie został omówiony na ekranie wspomnianym w tej odpowiedzi. –

18

użyłem zarówno z ćwiczeń zawartych w innych odpowiedzi, Railscast #210 i Devise Wiki. Jednak, o ile mogłem stwierdzić, nie mówią jednoznacznie, jak zweryfikować obecność i/lub unikatowość pola nazwy użytkownika.

Jeśli dodano nazwę użytkownika z prostym migracja -

rails generate migration addUsernameToUser username:string 

Następnie opracować niczego specjalnego nie robić z tego pola, więc trzeba dodać kontrole do walidacji i niepowtarzalność siebie w modelu użytkownika.

class User < ActiveRecord::Base 
... 
    validates_presence_of :username 
    validates_uniqueness_of :username 

Jednakże, jeśli spojrzeć na RailsCast # 209, znajduje się przykład migracji użytej do utworzenia modelu użytkownika.

class DeviseCreateUsers < ActiveRecord::Migration 
    def self.up 
    create_table(:users) do |t| 
     t.database_authenticatable :null => false 
     # t.confirmable 
     t.recoverable 
     t.rememberable 
     t.trackable 
     # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both 

     t.timestamps 
    end 

    add_index :users, :email,    :unique => true 
    # add_index :users, :confirmation_token, :unique => true 
    add_index :users, :reset_password_token, :unique => true 
    # add_index :users, :unlock_token,   :unique => true 
    end 

    def self.down 
    drop_table :users 
    end 
end 

Należy zauważyć, że adres e-mail użytkowników jest zdefiniowany jako unikalny. Być może jeśli nazwa użytkownika zostanie dodana przy użyciu tej samej składni, to magia zajmie się obecnością i wyjątkowością.

+0

Zrobiłem, jak powiedziałeś, validates_presence_of: username i validates_uniqueness_of: nazwa użytkownika w moim modelu "user", w jaki sposób zrobiłbym, gdy pojawi się błąd, "error name" jako pierwszy na liście, błędów, kiedy są wyświetlane ? –

14

Szyny 4 i silny Parametry

na szczycie góry musiałem wygenerować widoki z:

$ rails g devise:views 

potem devise.rb dodają:

config.scoped_views = true 

i wreszcie skonfigurować dozwolone parametry jak poniżej dla sign_up jak poniżej:

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

Również moja walidacji username jest następujący:

validates :username, presence: true 
validates :username, uniqueness: true, if: -> { self.username.present? } 

używam dwóch linii, więc jeśli username jest puste mam tylko jeden błąd.

+0

Jak zachować te nowe parametry, jeśli sprawdzanie poprawności nie powiedzie się? Obecnie tylko e-mail jest zachowywany. – Dexter

+0

uhm ... Nie mogę teraz sprawdzić, ale najpierw sprawdzam kontroler i zwracam obiekt '@ user' zawierający te wartości. Może e-mail jest jedynym polem nagranym, ponieważ obiekt jest pusty, a przeglądarka go wypełnia. Po prostu fotografowanie z bioder – ecoologic

+0

sprawdza również, czy szablon jest renderowany w tej samej akcji i nie ma przekierowania, w takim przypadku ponownie '@ user' będzie puste. Jeśli nadpisałeś widoki, sprawdź, czy są tam wartości. – ecoologic

Powiązane problemy