【问题标题】:Username can't be blank用户名不能为空
【发布时间】:2017-12-27 21:50:12
【问题描述】:

所以我输入了用户名、电子邮件和密码(+密码确认),点击提交后,它显示:“用户名不能为空”,我清楚地输入了用户名。

这是我的 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


这是我的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


以下是我的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" %>

add_username_to_users.rb(迁移)

class AddUsernameToUsers < ActiveRecord::Migration
  def change
    add_column :users, :username, :string
    add_index :users, :username, unique: true
  end
end

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

【问题讨论】:

标签: ruby-on-rails devise cloud9-ide


【解决方案1】:

在 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

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

请确保您按照此设计文档添加user_name 作为注册/登录参数here

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

【讨论】:

  • 所以我删除了20171231162016_create_add_user_name_to_users.rb。现在我应该检查文档以更改我的迁移。
  • 您可以这样做或删除该表,然后将 user_name 添加到您的 users 表中
  • 我不小心链接错了云 9. 我发给你的那个是我姐姐的,我们在做同样的事情。 ide.c9.io/kingsong/instagram-rose那个是我的。我遵循了文档。我已经生成了迁移并迁移了它。
  • 并将我的应用程序更改为:class ApplicationController &lt; ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters added_attrs = [:username, :email, :password, :password_confirmation, :remember_me] devise_parameter_sanitizer.permit :sign_up, keys: added_attrs devise_parameter_sanitizer.permit :account_update, keys: added_attrs end end
  • @iiRosie1 我的回答对您的问题有帮助吗?
猜你喜欢
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
相关资源
最近更新 更多