tôi đã sử dụng cả các hướng dẫn được đề cập trong câu trả lời khác, Railscast #210 và Devise Wiki. Tuy nhiên, cho đến nay tôi có thể nói rằng họ không nói rõ ràng làm thế nào để xác nhận sự hiện diện và/hoặc tính duy nhất của trường tên người dùng.
Nếu bạn thêm tên người dùng với một sự chuyển đổi rất đơn giản -
rails generate migration addUsernameToUser username:string
Sau đó đưa ra không làm bất cứ điều gì đặc biệt với lĩnh vực đó, vì vậy bạn cần phải thêm kiểm tra để xác nhận và tính độc đáo cho mình trong mô hình tài.
class User < ActiveRecord::Base
...
validates_presence_of :username
validates_uniqueness_of :username
Tuy nhiên, nếu bạn xem RailsCast # 209 có ví dụ về di chuyển được sử dụng để tạo Mô hình người dùng.
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
Lưu ý rằng email người dùng được xác định là duy nhất. Có lẽ nếu tên người dùng được thêm vào bằng cách sử dụng cú pháp tương tự này thì việc tạo ra phép thuật sẽ chăm sóc sự hiện diện và tính độc đáo.
Liên kết đó bị hỏng. Có lẽ lần sau bạn có thể đưa thông tin cần thiết vào câu trả lời của bạn? – Benson
Liên kết hiện chuyển hướng đến cấp cao nhất của Devise wiki. Vì tôi không biết Wiki ở đó, tôi thấy liên kết hữu ích. Có lẽ câu trả lời cụ thể giờ đây là https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign_in-using-their-username-or-email-address, dù lashleigh nói, bài viết đó không giải quyết _validating_ tên người dùng trong mô hình. –
Điều này chỉ không hoạt động nữa trong Rails 4. Nó không phải dễ dàng nữa. – CarlosCervantes