用户名不能为空

iiR*_*ie1 -5 ruby-on-rails devise cloud9-ide

所以我输入了用户名,电子邮件和密码(+密码确认),一旦我点击提交,它说:"用户名不能为空",我清楚地输入了用户名.

这是我的user.rb

class User < ActiveRecord::Base
  validates :user_name, presence: true, length: { minimum: 4, maximum: 16

  }
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end
Run Code Online (Sandbox Code Playgroud)


这是我的registrations_controller:

class RegistrationsController < Devise::RegistrationsController

  private

  def sign_up_params
    params.require(:user).permit(:email, :user_name, :password, :password_confirmation)
  end

  def account_update_params
    params.require(:user).permit(:email, :user_name, :password, :password_confirmation, :current_password)
  end
end
Run Code Online (Sandbox Code Playgroud)


以下是我的new.html.erb

<h2>Sign up</h2>

<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :user_name %>
    <%= f.input :email, required: true, autofocus: true %>
    <%= f.input :password, required: true, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %>
    <%= f.input :password_confirmation, required: true %>
  </div>

  <div class="form-actions">
    <%= f.button :submit, "Sign up" %>
  </div>
<% end %>

<%= render "devise/shared/links" %>
Run Code Online (Sandbox Code Playgroud)

add_username_to_users.rb(迁移)

class AddUsernameToUsers < ActiveRecord::Migration
  def change
    add_column :users, :username, :string
    add_index :users, :username, unique: true
  end
end
Run Code Online (Sandbox Code Playgroud)

如果还有其他需要发布的内容,要查找有关错误的更多信息,请发表评论.另外,请注意我已经设计了gem(正确安装)并且我正在使用cloud 9编辑器.提前致谢!

jdg*_*ray 5

在c9.io上查看代码时,迁移文件肯定存在问题:

class CreateAddUserNameToUsers < ActiveRecord::Migration
  def change
    create_table :add_user_name_to_users do |t|
      t.string :user_name

      t.timestamps null: false
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这实际上创建了一个名为的表add_user_name_to_users,您可以在schema.rb文件中找到该表.因此,当您User使用注册表单创建时,由于它不存在,因此无法user_nameUser表中进行验证.您应该删除迁移文件,20171231162016_create_add_user_name_to_users.rb因为它不是您要执行的操作或删除表(这里有一些用于更改迁移的文档).

相反,请确保遵循此设计文档,user_name此处添加一个注册/登录参数.

您还有一个models与您的users表具有相同字段的表(也假设这是偶然放在这里.请确保您仔细检查您的迁移,因为它看起来像是您看到的错误的结果之一.