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ą.
Ten link jest uszkodzony. Być może następnym razem będziesz mógł umieścić niezbędne informacje w swojej odpowiedzi? – Benson
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. –
To po prostu nie działa już w Rails 4. To już nie jest łatwe. – CarlosCervantes