ste*_*392 21 attributes ruby-on-rails custom-attributes devise
我正在尝试为Devise提供的User模型添加name属性.我在我的数据库中添加了一个"名称"列,并更改了注册视图,以便它询问用户的名字:
<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" %>
Run Code Online (Sandbox Code Playgroud)
它允许我登录,但是当我这样做后检查数据库时,name: nil.我是否必须向Devise的User控制器添加一些东西?谢谢!
Joh*_*non 18
在您的用户模型中找到;
attr_accessible :email, :password, :password_confirmation, :remember_me
Run Code Online (Sandbox Code Playgroud)
并添加:名称末尾
Per*_*vez 10
将此代码添加到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
Run Code Online (Sandbox Code Playgroud)
经过测试:rails 5.1.0(devise 4.2.1)
无需使用设计控制器。
只需将以下内容添加到您的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
Run Code Online (Sandbox Code Playgroud)
devise_parameter_sanitizer.for不再与Rails 5配合使用(更正确的说,它是devise 4不支持的,后者是Rails 5上下文中的预期devise版本):用于devise_parameter_sanitizer.permit避免undefined method 'for' for #<Devise::ParameterSanitizer错误
像这样使用
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
Run Code Online (Sandbox Code Playgroud)
最后添加其他字段.
| 归档时间: |
|
| 查看次数: |
12929 次 |
| 最近记录: |