【问题标题】:User Exists on creation, but it actually doesn't in the Database用户在创建时存在,但实际上不在数据库中
【发布时间】:2014-07-07 22:04:30
【问题描述】:

我的当前应用程序的数据库设置有一个奇怪的问题。

由于迁移顺利通过,但是当我尝试使用一些测试数据为数据库播种时,它说数据存在并回滚事务。

当我查询数据库以检查记录是否存在时,它返回 nil。

在这一点上,我迷失在我应该寻找罪魁祸首的地方。

感谢任何帮助。

seeds.rb:

User.create(first_name: 'John', last_name: 'Doe', email: 'john@doe.com', password: 'testing', is_admin: true)

rake db:seed 输出:

  ActiveRecord::SchemaMigration Load (0.5ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (0.2ms)  BEGIN
  User Exists (1.0ms)  SELECT  1 AS one FROM "users"  WHERE "users"."email" = 'john@doe.com' LIMIT 1
   (0.2ms)  ROLLBACK

User.all:

  User Load (1.0ms)  SELECT "users".* FROM "users"
  User Load (1.0ms)  SELECT "users".* FROM "users"
=> []

【问题讨论】:

  • 试试create!,你会看到错误。
  • SELECT 1 AS one... 表明您对电子邮件地址进行了唯一性验证,这可能会失败。

标签: ruby-on-rails ruby macos postgresql activerecord


【解决方案1】:

要么使用 User.create!或者这样的代码

user = User.create(first_name: 'John', last_name: 'Doe', email: 'john@doe.com', password: 'testing', is_admin: true)

然后运行user.save

【讨论】:

    【解决方案2】:

    由于某些验证错误,用户创建似乎失败了,即 User 模型上的任何验证都禁止创建您的用户记录。

    您可以做的是,将seeds.rb 更新为:

    User.create!(first_name: 'John', last_name: 'Doe', email: 'john@doe.com', password: 'testing', is_admin: true) 
    

    通知 create! 而不是 create

    这样您就可以知道用户创建失败的验证。

    【讨论】:

      猜你喜欢
      • 2021-07-26
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      相关资源
      最近更新 更多