如何从postgres中删除与另一个关联的对象



我使用rails作为ruby web框架。我有一个与另一个对象关联的对象。例如:假设我们正在rails上创建一个Twitter克隆,如果我们删除一个Twitter用户,我们也会删除他们的所有推文。看起来像这样:

class TwitterAcc < ApplicationRecord 
has_many :tweets, dependent: :destroy
belongs_to :user
end

这个代码片段意味着,如果我们删除用户的Twitter帐户,那么我们应该删除他们的所有推文。如果不删除推文,我们将如何删除推特账户?

class TwitterAcc < ApplicationRecord 
has_many :tweets
belongs_to :user
end

此代码段^^^不起作用。它会抛出此错误"ActiveRecord::InvalidForeignKey"

问题是(如果事情是正确的)您的TwitterAcc表和tweets之间有一个外键。因此,一条推特记录CANOT有一个不存在的tweet_acc_id。如果你试图摧毁高音扬声器,情况就是这样。PSQL对不满意

所以你有多种选择:

  • 或者您允许您的tweets表记录twitter_acc id,但随后您需要删除外键(这不是一个好主意)
  • 或者你允许你的tweets表在tweets#twitted_acc_id上有一个零值(+你的Tweet模型上可能需要一个belongs_to :tweet_acc, optional: true),并在你的TweeterAcc模型上使用has_many :tweets, dependent: :nullify
  • 或者你只是软删除了你的推特账号型号,所以软删除的记录变成了";不可见的";对于您的应用程序业务逻辑,但不需要处理可为null或不存在的FK(https://github.com/jhawthorn/discard)

最新更新