【问题标题】:Devise: Tries to create a record without ID设计:尝试创建没有 ID 的记录
【发布时间】:2012-07-27 08:24:22
【问题描述】:

我是 Rails 新手,我正在尝试使用 devise 为身份验证部分创建一个应用程序。我注意到的第一件事是我的测试失败了,因为我的用户设备没有 ID,所以我把它放在我的 User 模型上

self.primary_key = :id

这有助于我的测试运行,但现在我遇到了另一个问题。每次我尝试添加用户时,Devise 控制器都会失败并显示以下消息:

ActiveRecord::StatementInvalid in Devise::RegistrationsController#create

SQLite3::ConstraintException: users.id may not be NULL: INSERT INTO "users" ("active", "created_at", "current_sign_in_at", "current_sign_in_ip", "default_business_id", "email", "encrypted_password", "first_name", "last_name", "last_sign_in_at", "last_sign_in_ip", "remember_created_at", "reset_password_sent_at", "reset_password_token", "sign_in_count", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

为什么没有自动创建用户 ID?我正在使用 Rails 3.2 运行 Devise 2

【问题讨论】:

  • 请出示您的认证相关代码。
  • 嗯,通常情况下,设置主键不是您需要做的事情。如果我是你,我会检查我的固定装置,你可能会在那里发现问题。
  • @Niels,这个异常发生在我在前端创建一个真实用户时,测试运行良好......无论如何,我会检查固定装置,因为你说的是​​对的我不应该设置主键
  • @Denis,我在需要身份验证的控制器中只有before_filter :authenticate_user!,这是我现在所有的身份验证代码...我没有更改任何与设计相关的内容

标签: ruby-on-rails ruby sqlite devise


【解决方案1】:

嗯,我终于找到了问题所在。 usersid 列未定义为数据库中的主键,所以这就是 Rails 没有自动为其分配值的原因。我不知道它是怎么发生的,因为我没有接触到创建这个表的迁移(这个文件是由 Devise 生成的)。无论如何,进行完全回滚并再次执行迁移可以解决问题。感谢所有回复的人,并希望这对未来的任何人都有帮助。

【讨论】:

    猜你喜欢
    • 2014-11-04
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多