设计:我添加了一个用户名字段,但它不起作用

时间:2013-08-11 06:32:26

标签: ruby-on-rails devise ruby-on-rails-4

我已将我的用户名字段添加到我的User模型中,但似乎设计在创建新用户记录时无法识别它。我填写了电子邮件,用户名和密码,但我收到验证错误“用户名不能为空”,即使我的params hash清楚地显示它。我不需要让人们使用他们的用户名登录,但我只需要他们在注册新帐户时进行设置。

我正在使用rails 4,我已经实现了devise的github README中提到的强参数。

这是我的user.rb文件

devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

before_save { |user| user.username = user.username.downcase }

validates_presence_of :username
validates_uniqueness_of :username, case_sensitive: false 

这是我的application_controller.rb文件

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  before_filter :configure_permitted_parameters, if: :devise_controller?

protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :username, :password, :password) }
  end
end

我还添加了registrations/new.html.erb文件:

<div><%= f.label :username %>
<%= f.text_field :username %></div>

以下是我提交新用户记录时我的params哈希的内容:

user: !ruby/hash:ActionController::Parameters
  username: David
  email: david@example.com
  password: foobar12
  password_confirmation: foobar12

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

事实证明,我上面的强烈参数不正确。

我通过将其修改为:

来修复它
devise_parameter_sanitizer.for(:sign_up) do |u|
  u.permit(:email, :username, :password, :password_confirmation)
end