我得到了这个输出:
Patient Exists (0.3ms) SELECT 1 AS one FROM "patients" WHERE "patients"."chrono_id" = 5668276 LIMIT 1
我知道那个带有该号码的chrono_id的患者记录不存在,但无论如何我都去了控制台检查。
Patient.where(chrono_id: 5668276)
Patient Load (0.5ms) SELECT "patients".* FROM "patients" WHERE "patients"."chrono_id" = 5668276
=> #<ActiveRecord::Relation []>
控制台同意我的意见。
我的模型验证看起来像
validates_uniqueness_of :chrono_id, :allow_blank => true, :allow_nil => true
如果我尝试在控制台中创建患者,我会收到相同的错误
Patient.create(chrono_id: 5668276, first_name: "a", last_name: "a", dob: "1988/12/11")
(0.2ms) BEGIN
Patient Exists (0.4ms) SELECT 1 AS one FROM "patients" WHERE "patients"."chrono_id" = 5668276 LIMIT 1
这是令人放心的,因为至少它意味着它不是一个环境问题。
我尝试重新创建结果返回的确切sql请求,这样我就可以看到结果并找出创建的时间/方式
a = ActiveRecord::Base.connection.select_all("SELECT 1 AS one FROM patients WHERE patients.chrono_id = 5668276 LIMIT 1")
(0.4ms) SELECT 1 AS one FROM patients WHERE patients.chrono_id = 5668276 LIMIT 1
=> #<ActiveRecord::Result:0x007fe0d343f650 @columns=["one"], @rows=[], @hash_rows=nil, @column_types={"one"=>#<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID::Integer:0x007fe0cef8bcc0>}>
没有返回行值,所以我仍然感到困惑。有什么想法吗?
更新
我输了一个错字,正在输入其他必填字段之一为零。出于某种原因,Activerecord错误并没有告诉我这个字段存在问题,而是抛出了这个unique_record问题。
更新2 日志中的完整消息是
(0.1ms) BEGIN
Patient Exists (0.9ms) SELECT 1 AS one FROM "patients" WHERE "patients"."chrono_id" = 5669845 LIMIT 1
(0.2ms) ROLLBACK
答案 0 :(得分:0)
我输了一个错字,正在输入其他必填字段之一为零。对我原帖的评论指出,我引用的'错误'实际上只是一个运行唯一性检查的日志,而不是它已经返回正数,尽管下一行是回滚。
如果遇到类似问题,我鼓励任何人阅读主帖上的评论。如果以海报作为答案进行总结,我会选择这个作为问题的答案。