2011-08-16 36 views
18

Tôi đang cố thêm thuộc tính tên vào Mô hình người dùng do Devise cung cấp. Tôi đã thêm một "tên" cột để cơ sở dữ liệu của tôi, và thay đổi đăng ký xem để nó yêu cầu tên của người dùng:Thêm thuộc tính tên vào 'Người dùng` trong Devise

<h2>Sign up</h2> 

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 

    <p><%= f.label :name %><br /> 
    <%= f.text_field :name %></p> 

    <p><%= f.label :email %><br /> 
    <%= f.email_field :email %></p> 

    <p><%= f.label :password %><br /> 
    <%= f.password_field :password %></p> 

    <p><%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation %></p> 

    <p><%= f.submit "Sign up" %></p> 
<% end %> 

<%= render :partial => "devise/shared/links" %> 

Nó cho phép tôi đăng nhập, nhưng khi tôi kiểm tra cơ sở dữ liệu sau khi làm như vậy, name: nil . Tôi có phải thêm gì đó vào bộ điều khiển User của Devise hay gì đó không? Cảm ơn!

+1

Bạn cũng không cần phải tạo di chuyển để thêm "tên" vào bảng cơ sở dữ liệu cho Người dùng? –

Trả lời

17

trong mô hình người dùng của bạn xác định vị trí;

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

và thêm: tên vào cuối

+11

những gì về rails4? vì không có điều attr_accessible như vậy –

+0

@namiheike Không chắc chắn những gì câu trả lời cho rails 4 là vào lúc này, nhưng một sửa chữa nhanh chóng sẽ được thêm đá quý 'protected_attributes' để gemfile của bạn. Sau đó, bạn có thể sử dụng attr_accessible – Jordan

+3

Xem tại đây cho Rails 4: https://github.com/plataformatec/devise#strong-parameters – AmitA

2

Yes. Thêm :name-attr_accessible trong tài khoản Mẫu

6

Đối với Rails 4

Sử dụng như thế này

protected 
def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) } 
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) } 
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) } 
end 

Thêm trường bổ sung ở cuối.

+0

Tôi có thể thêm thông tin này ở đâu? Tôi có phải tạo user_controller không? –

+1

'app/controllers/application_controller.rb' Ví dụ: https://github.com/mistergiri/ExamAwesomeIdeas/blob/master/app/controllers/application_controller.rb – Giri

7

Thêm mã này để application_controller.rb

before_action :configure_permitted_parameters, if: :devise_controller? 



protected 
def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) } 
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) } 
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) } 
end 
1

Viết mã này bên trong lớp ApplicationController ...

before_action :configure_permitted_parameters, if: :devise_controller? 

     protected 

     def configure_permitted_parameters 
     devise_parameter_sanitizer.for(:sign_up) << :name 
0

bỏ ghi chú một số các mã được tạo:

class Users::RegistrationsController < Devise::RegistrationsController 
    before_filter :configure_sign_up_params, only: [:create] 

    protected 

    def configure_sign_up_params 
    devise_parameter_sanitizer.for(:sign_up) << :name 
    end 
end 
0
private 

    def sign_up_params 
    params.require(:user).permit(:name,:email,:gender,:age,:password,:password_confirmation) if params[:user].present? 
    end 

Thêm này trong bộ điều khiển mở rộng điều khiển đăng ký mặc định devise của

2

Đối với Rails 5 (trong thực tế đưa ra 4)

Tested cho: ray 5.1.0 (đưa ra 4.2.1)

Có không cần phải làm việc với bộ điều khiển dự phòng.

Chỉ cần thêm dòng sau vào bạn application_controller.rb:

before_action :configure_permitted_parameters, if: :devise_controller? 


protected 

    def configure_permitted_parameters 

    devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) 

    end 

devise_parameter_sanitizer.for không còn làm việc với Rails 5 (là đúng hơn, nó không được hỗ trợ trong devise 4, đó là phiên bản devise mong chờ ở một Rails 5 ngữ cảnh): sử dụng devise_parameter_sanitizer.permit để tránh lỗi undefined method 'for' for #<Devise::ParameterSanitizer

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