ruby-on-rails - 在rails控制台中删除带有nil id的记录heroku ruby​​ postgres

标签 ruby-on-rails postgresql heroku

我使用 destroy 在 Heroku Rails 控制台中远程删除一条记录,现在如果我写入,它不会显示

 MyModel.find_by(email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4b3824262e0b2e262a222765282426" rel="noreferrer noopener nofollow">[email protected]</a>')

但如果我写它就会显示

MyModel.find_by_or_create_by(email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="097a66646c496c64686065276a6664" rel="noreferrer noopener nofollow">[email protected]</a>')

...除了 id 为零。我不知道如何摆脱这个记录。我正在使用 postgres 和 Rails 4

当我尝试通过网络用户界面使用同一电子邮件创建新记录时,它会触发该幽灵记录的唯一性验证...但我无法删除幽灵记录。

最佳答案

何时 find_or_create_by返回 nil 的记录 id ,这表明 find部分失败,然后 create部分也因验证错误而失败。从 MyModel.find_or_create_by(email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2d5e4240486d48404c4441034e4240" rel="noreferrer noopener nofollow">[email protected]</a>').errors.full_messages 你能得到什么? ?我猜您会看到与在 Web 控制台中看到的相同的唯一性验证错误。

您的应用程序是否使用软删除方法,例如带有像 acts_as_paranoid 这样的 gem 或permanent_records ?这些 gem 改变了 destroy 的行为这样它就不会发出 SQL DELETE命令而是设置 deleted_at柱子。它们还隐藏软删除记录,因此这可能就是原因 find_by没有给你任何东西。如果这就是您正在做的事情,您应该确保您的唯一性验证知道忽略软删除记录。如何执行此操作取决于您的软删除实现,但您可能会发现 some tips here .

您可能想尝试直接使用 SQL 来查看数据库中的实际内容,例如使用 Heroku psql 提示符或以下 Ruby 代码:MyModel.unscoped.where(email: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a4d7cbc9c1e4c1c9c5cdc88ac7cbc9" rel="noreferrer noopener nofollow">[email protected]</a>")

关于ruby-on-rails - 在rails控制台中删除带有nil id的记录heroku ruby​​ postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40476131/

相关文章:

database - 没有匹配给定键的唯一约束也最终使关系不存在

hibernate - 使用 Grails 和 GORM 在 PostgreSQL 中存储日期、时间和时区

node.js - 部署到 Heroku 的 NodeJS 应用程序不支持异步函数

django.core.exceptions.ImproperlyConfigured : WSGI application '{project_name}.wsgi.application' could not be loaded; Error importing module

ruby-on-rails - 事件管理员 : how to add sortable on nested model's json column

ruby-on-rails - 为什么accessible_attributes 有一个空字符串?

ruby-on-rails - Ruby 中的强参数

java - 在 JPA 2 Criteria API 中选择 DISTINCT + ORDER BY

Heroku 上的 Django

ruby-on-rails - 如何使用 ruby​​ aws s3 一次删除多个对象