Ruby on rails 在postgresql中手动删除了一行,现在ActiveRecord正在中断

Ruby on rails 在postgresql中手动删除了一行,现在ActiveRecord正在中断,ruby-on-rails,ruby,postgresql,activerecord,Ruby On Rails,Ruby,Postgresql,Activerecord,我的Rails应用程序正在使用Postgres支持的ActiveRecord。我通过psql进入数据库,从其中一个表中删除了一行。事后看来,这是一个可怕的决定,因为它导致应用程序中试图引用该对象的部分崩溃 例如: undefined method `first_name' for nil:NilClass 或 现在我有两个问题 我该如何解决这个问题 通过rails控制台生产操作数据是否是手动更新数据的最佳方式?还是我也应该避免 代码示例 Reward.all.order("created_at

我的Rails应用程序正在使用Postgres支持的ActiveRecord。我通过psql进入数据库,从其中一个表中删除了一行。事后看来,这是一个可怕的决定,因为它导致应用程序中试图引用该对象的部分崩溃

例如:

undefined method `first_name' for nil:NilClass

现在我有两个问题

  • 我该如何解决这个问题

  • 通过rails控制台生产操作数据是否是手动更新数据的最佳方式?还是我也应该避免

  • 代码示例

    Reward.all.order("created_at DESC").where(warning: false, created_at: @yearrange).page(params[:page])
    

    如果奖励包含对个人id的引用,则与PHP相反,ruby/Rack应用程序(如Rails)会保留在内存中,以供后续请求使用。对旧数据的引用很可能在缓存中的某个位置被引用。尝试重新加载应用程序服务器以进行修复

    更可能的罪魁祸首是memcached或类似的东西。根据需要冲洗

    我对Rails还不够熟悉,不能确定最后一点,但我可以想象Rails控制台使用应用程序的代码流,并根据需要刷新缓存



    注意:正如@muistooshort在评论中指出的,如果您没有在模式中创建FK cnstraints,它也可能是某个地方的悬挂外键。

    我已经尝试重新启动服务器,但仍然会发生这种情况。我不相信该应用程序使用的是memcache(我没有编写原始项目)。@Denis Eep,真的吗?我想要基于侦听/通知的缓存失效或其他东西。它只是盲目地假设没有其他人会在同一时间处理相同的数据吗?我猜在某个地方会有一个悬而未决的FK,因为Rails认为“数据库中的逻辑”是不好的,而像“通过真实FK的数据完整性”这样的愚蠢的事情被算作“逻辑”(糟糕的逻辑!糟糕!坐到角落里去!)。如果我听起来有点痛苦,请原谅,在Rails领域做一个数据库员是很困难的。@CraigRinger:是的。Rails(以及其他语言的框架)假设数据存储在一个巨大的字典中。出于这个原因,它还鼓励你在应用程序中写入触发器或SP中的内容。你是否
    从id=137的人中删除了
    可能?是的,id为137的人很可能就是我删除的对象。将其手动放回或跟踪引用它的所有内容,并修复那些悬空的引用。然后看看外国人创业板,开始在数据库中使用真正的FKs,这样数据库就可以保护您免受这种数据损坏。这就是我最后所做的。非常感谢。
    
    Reward.all.order("created_at DESC").where(warning: false, created_at: @yearrange).page(params[:page])