Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails无法删除或更新父行:如果不使用依赖销毁,外键约束将失败_Ruby On Rails - Fatal编程技术网

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
时,它不会调用任何回调,这意味着它永远不会延迟作业。它一次删除所有记录,但有很多记录,我不想让服务器过载