添加了新模型和控制器 - 用户注册突然失败

时间:2015-11-02 22:19:01

标签: ruby-on-rails devise

我之前在rails应用程序上更改了设计,允许我通过用户名而不是电子邮件注册,也不需要电子邮件。我成功创建了一个没有电子邮件的帐户。今天我添加了一个Profile模型和配置文件控制器,并与配置文件模型和我的用户模型建立了关系。现在,当我尝试注册时,我收到此错误:

“SQLite3 :: ConstraintException:UNIQUE约束失败:users.email:INSERT INTO”users“(”username“,”encrypted_pa​​ssword“,”created_at“,”updated_at“)VALUES(?,?,?,?)”

我已尝试添加此迁移:

  def change
    change_column :users, :email, :string, :null => true
  end

我尝试添加:

  def email_required?
    false
  end

到我的个人资料模型,即使它已经在我的用户模型中。我真的不知道从哪里开始。我必须假设它与新模型或控制器有关,因为没有它们它工作正常。

3 个答案:

答案 0 :(得分:1)

电子邮件列仍然存在于表中,并且具有UNIQUE约束。创建表git checkout [someOtherBranch] [path/to/file] [path/we/want/to/copy/to] 时检查是否有这样的行:

users

有两条带有空电子邮件的记录会导致此例外。

顺便说一下,它与你以后做的事情无关(添加个人资料模型等)。

答案 1 :(得分:1)

问题解决了。在此处尝试建议并仍然收到相同的错误消息后,我最终通过以下方式从用户中删除了整个电子邮件列:

rails generate migration remove_email_from_users email:string

我写了自己的验证,否则我猜这会导致问题:设计的可验证部分。如果有人知道以这种方式解决问题的任何潜在的严重问题,请在这里评论。我自己的项目很小,所以我不认为这会是一个问题,但是将来搜索这个帖子的人可能会发现在他们的应用程序中知道这可能会有什么帮助。

答案 2 :(得分:0)

您需要创建这样的迁移:

def change
  change_column :users, :email, :string, :null => true
  remove_index :users, :email
end

Devise在第一次运行时添加了这个:CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email")

这导致你的失败,表中已经存在null。

相关问题