2010-09-11 21 views
14

tôi tạo ra mặc định devise ý kiến ​​với:Thêm trường bổ sung và xác nhận để đưa ra quan điểm/mô hình trong Rails ứng dụng

rails generate devise:views 

Sau đó, tôi đã thêm một lĩnh vực username mẫu views/devise/registrations/new.html.erb.

Hiện tại, chỉ xảy ra email và xác nhận password. Làm cách nào để xác thực tính hiện diện và tính duy nhất của trường username? Tôi có cần phải thêm gì đó vào mô hình User không?

Trả lời

-2

Chỉ cần thêm một lĩnh vực tên người dùng để mô hình tài khoản của bạn và trên wiki lập mưu: http://github.com/plataformatec/devise/wiki/Sign-in-using-login-or-mail

Hy vọng nó giúp.

+4

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

+1

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. –

+0

Đ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

-7

Làm thế nào để tùy chỉnh lập mưu ... Mọi thứ đều ở đây: http://railscasts.com/episodes/210-customizing-devise

+7

Đọc lỗi là phải, IMO. Ngoài ra, nếu thông tin cần thiết ở đó, bạn có thể dễ dàng cung cấp nó ở đây, như lashleigh đã làm. RTFM không phải là câu trả lời. – Benson

+1

Có một liên kết trực tiếp đến một "hướng dẫn" chính xác, có liên quan (trong trường hợp này là một screencast) từ một nguồn được tôn trọng là hữu ích. –

+1

Vấn đề này không được thảo luận trên màn hình được đề cập trong câu trả lời này. –

18

tôi đã sử dụng cả các hướng dẫn được đề cập trong câu trả lời khác, Railscast #210Devise 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.

+0

Tôi đã làm như bạn đã nói validates_presence_of: tên người dùng và validates_uniqueness_of: tên người dùng trong mô hình "người dùng" của tôi, làm cách nào tôi thực hiện khi lỗi xuất hiện, "lỗi tên" là người đầu tiên trong danh sách, lỗi, khi chúng được hiển thị ? –

14

Rails 4 và thông số mạnh

Ngày đầu trên, chúng tôi đã phải tạo ra các quan điểm với:

$ rails g devise:views 

sau đó trong devise.rb add:

config.scoped_views = true 

và cuối cùng là cấu hình các thông số được phép như sau cho sign_up như sau:

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

Ngoài ra, xác nhận của tôi cho username như sau:

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

tôi sử dụng hai dòng, vì vậy nếu username là trống tôi nhận được chỉ có một lỗi.

+0

Làm cách nào để bạn giữ lại các tham số mới này nếu xác thực không thành công? Ngay bây giờ, chỉ email được giữ nguyên. – Dexter

+0

uhm ... Tôi không thể kiểm tra ngay bây giờ, nhưng trước tiên tôi sẽ kiểm tra trong bộ điều khiển và đảm bảo rằng nó trả về đối tượng '@ user' chứa các giá trị đó. Có lẽ email là trường duy nhất được ghi lại vì đối tượng trống và trình duyệt điền vào. Chỉ cần chụp từ hông – ecoologic

+0

cũng kiểm tra xem mẫu có được hiển thị trong cùng một hành động và không có chuyển hướng, trong trường hợp đó, một lần nữa, '@ user' sẽ trống. Nếu bạn đã ghi đè các chế độ xem, hãy kiểm tra chế độ xem có các giá trị ở đó không. – ecoologic

2

Tôi nghĩ rằng this link cũng sẽ hữu ích khi hiểu phần xác thực của Devise

Các vấn đề liên quan