Ruby on rails 接收id从属于不属于';t更新并销毁其父级
我有一个自我属于的模型:Ruby on rails 接收id从属于不属于';t更新并销毁其父级,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个自我属于的模型: class SyncType < ActiveRecord::Base belongs_to :sync_type, touch: true has_many :sync_types, -> { order('created_at ASC') } end 但是当我销毁id为99的对象时,它的引用不会在id为95的对象上更新(sync_type_id:99)。我可以做些什么来刷新它?我想在销毁时将sync_type_id:nil放入 根据rails指
class SyncType < ActiveRecord::Base
belongs_to :sync_type, touch: true
has_many :sync_types, -> { order('created_at ASC') }
end
但是当我销毁id为99的对象时,它的引用不会在id为95的对象上更新(sync_type_id:99)。我可以做些什么来刷新它?我想在销毁时将sync_type_id:nil放入
根据rails指南中的“touch:true”,这会起作用,但事实并非如此
我的临时解决方案:
@sync_types_to_destroy.each do |sync_to_destroy|
sync_to_destroy.sync_types.each do |child|
child.sync_type = nil
child.save
end
sync_to_destroy.destroy
end
如果您有更好的想法,请帮助我:p您可以创建一个before_destroy回调来删除其他记录上的链接
class SyncType < ActiveRecord::Base
before_destroy :remove_links
private
def remove_links
SyncType.where('sync_type_id = ?', id).update_all(sync_type_id: nil)
end
end
class-SyncType
在多关联上设置:dependent选项:
has_many :sync_types, -> { order('created_at ASC') }, dependent: :nullify
现在,当您销毁父记录时,子记录的sync_type_id属性将为空
sync_type = SyncType.where("sync_type_id is null").first
sync_type.destroy
使用示例记录,执行以下SQL:
BEGIN
UPDATE `sync_types` SET `sync_types`.`sync_type_id` = NULL WHERE `sync_types`.`sync_type_id` = 99 ORDER BY created_at ASC;
DELETE FROM `sync_types` WHERE `sync_types`.`id` = 99;
COMMIT
谢谢你的帮助,但是上面的答案对我有帮助!
sync_type = SyncType.where("sync_type_id is null").first
sync_type.destroy
BEGIN
UPDATE `sync_types` SET `sync_types`.`sync_type_id` = NULL WHERE `sync_types`.`sync_type_id` = 99 ORDER BY created_at ASC;
DELETE FROM `sync_types` WHERE `sync_types`.`id` = 99;
COMMIT