我正在尝试为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" %>
它允许我登录,但是在我执行此操作后检查数据库时name: nil
。我是否必须向Devise的User
控制器添加一些内容?谢谢!
答案 0 :(得分:18)
在您的用户模型中找到;
attr_accessible :email, :password, :password_confirmation, :remember_me
并在末尾添加:名称
答案 1 :(得分: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
答案 2 :(得分:6)
像这样使用
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
在最后添加其他字段。
答案 3 :(得分:6)
测试:rails 5.1.0(设计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
devise_parameter_sanitizer.for
不再适用于Rails 5(更正确的是,它在设计4中不受支持,这是Rails 5上下文中预期的设计版本):使用devise_parameter_sanitizer.permit
来避免{ {1}}错误
答案 4 :(得分:2)
是。在用户模型
中将:name
添加到attr_accessible
答案 5 :(得分:1)
将此代码写入ApplicationController类...
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :name
答案 6 :(得分:0)
取消注释一些生成的代码:
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
答案 7 :(得分:0)
private
def sign_up_params
params.require(:user).permit(:name,:email,:gender,:age,:password,:password_confirmation) if params[:user].present?
end
在扩展设备的默认注册控制器
的控制器中添加它