我使用 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/