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

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)

并添加:名称末尾

  • 那么rails4呢?因为没有这样的attr_accessible事情 (11认同)
  • 请参阅此处获取Rails 4:https://github.com/plataformatec/devise#strong-parameters (3认同)

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)


Var*_*mus 8

对于Rails 5(实际上是设计4)

经过测试: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错误


Gir*_*iri 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
Run Code Online (Sandbox Code Playgroud)

最后添加其他字段.