Как удалить (разъединить) связь без удаления в активной записи

#ruby-on-rails #activerecord

#ruby-on-rails #activerecord

Вопрос:

Предполагая следующие модели:

 class Thing
  has_many :whats
end

class What
  belongs_to :thing
end
  

Имея конкретный Thing объект, я хочу отделить все whats от него, но я не хочу удалять / уничтожать whats . Мне просто нужно What.thing = null .

Ответ №1:

Простым решением в терминале было бы запустить консоль, просмотреть все Whats и обновить thing_id до nil

 rails c
What.all.each do |what| what.update(thing_id: nil) end
  

Комментарии:

1. Мне нужно сделать это как часть процесса, но это дало мне то, что мне было нужно. Спасибо!

Ответ №2:

Более эффективным было бы сделать:

 What.joins(:thing).where(things: @thing).destroy_all
  

или

 What.where(thing_id: @thing.id).destroy_all