在Devise中将name属性添加到`User`

时间:2011-08-16 22:09:01

标签: ruby-on-rails attributes devise custom-attributes

我正在尝试为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控制器添加一些内容?谢谢!

8 个答案:

答案 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)

对于Rails 4

像这样使用

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(事实上设计为4)

测试: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

在扩展设备的默认注册控制器

的控制器中添加它