Ruby on rails Rails无法删除或更新父行:如果不使用依赖销毁,外键约束将失败
有没有一种方法可以绕过外键约束错误而不删除外键?我不想做Ruby on rails Rails无法删除或更新父行:如果不使用依赖销毁,外键约束将失败,ruby-on-rails,Ruby On Rails,有没有一种方法可以绕过外键约束错误而不删除外键?我不想做dependent destroy 我试图使用delayed_jobs从我的数据库中删除大量记录,但我得到一个无法删除或更新父行:外键约束失败,因为我的numbers表有一个外键用户id 这是我的用户模型,我在其中删除一个用户,并在回调中调用该方法删除与该用户关联的所有号码 class User < ActiveRecord::Base has_many :numbers, inverse_of: :user before_destr
dependent destroy
我试图使用delayed_jobs
从我的数据库中删除大量记录,但我得到一个无法删除或更新父行:外键约束失败
,因为我的numbers
表有一个外键用户id
这是我的用户模型,我在其中删除一个用户,并在回调中调用该方法删除与该用户关联的所有号码
class User < ActiveRecord::Base
has_many :numbers, inverse_of: :user
before_destroy :schedule_number_destroy
def schedule_number_destroy
user_id = self.id
User.delay(run_at: 40.minutes.from_now).destroy_numbers(user_id)
end
def self.destroy_numbers(user_id)
loop do
numbers = Number.where(user_id: user_id).limit(5000)
break if numbers.count == 0
numbers.destroy_all
sleep(2)
end
end
class用户
数字模型
class Number < ActiveRecord::Base
belongs_to :user
类号
您可以尝试以下方法:
# app/models/user.rb
has_many :numbers, dependent: :nullify
当您删除任何用户时,它将从相关号码中删除
user\u id
。我尝试过,但它不适用于延迟的\u作业
。据我所知,当使用dependent::nullify
时,它不会调用任何回调,这意味着它永远不会延迟作业。它一次删除所有记录,但有很多记录,我不想让服务器过载