【问题标题】:find_or_create_by causes SQLite3 PRIMARY KEY must be unique errorfind_or_create_by 导致 SQLite3 PRIMARY KEY must be unique 错误
【发布时间】:2014-01-30 09:06:21
【问题描述】:

我使用 ActiveRecord 和 Ruby(没有 Rails)来连接 SQLite3 数据库。我从 Web API 获取一些数据并使用 find_or_create_by(some_hash) 将其存储在数据库中。只要some_hash 数据是唯一的,它就可以正常工作。如果some_hash已经存在于数据库中,则find_or_create_by方法失败并给出以下sql错误:SQLite3::ConstraintException: PRIMARY KEY must be unique。

我希望find_or_create 方法首先检查我的数据库以查看数据是否已经存在,如果存在,那么它不会创建重复条目。但是,如果它没有找到数据,那么只有这样它才会创建一个新条目。那么,当some_hash 已经存在于数据库中时,为什么我会收到该错误,就像它试图保存重复条目一样?

我该如何解决这个问题?

【问题讨论】:

    标签: ruby activerecord sqlite


    【解决方案1】:

    我不知道它为什么会向您抛出该错误,但如果您愿意,您可以将方法分解为其组成部分:

    A.create(some_hash) unless A.where(some_hash).present?
    

    希望有帮助

    【讨论】:

      【解决方案2】:

      以下是有效的:

      A.create(some_hash) unless A.where("id" => some_hash["id"]).exists?
      

      由于某种原因,使用 some_hash 查询数据库会导致误报,因此我必须明确指定 id

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-20
        • 1970-01-01
        • 2012-11-20
        • 2020-05-16
        • 2021-05-04
        • 1970-01-01
        • 2020-07-24
        相关资源
        最近更新 更多