Некоторые объекты отказываются быть уничтоженными (rails)

#ruby-on-rails #ruby #object #rake

#ruby-on-rails #ruby #объект #грабли

Вопрос:

Я запускаю задачу rake, чтобы уничтожить все мои объекты «курса»:

 task :destroy_all_classes => :environment do 
  Course.all.each do |c| 
    c.destroy
  end 
end
  

Это уничтожает большинство курсов, но 12 остаются (из 40 ). Что может помешать мне их удалить?

Если я попытаюсь удалить каждый курс вручную, через консоль, я получу это:

 ruby-1.9.2-p290 :030 > Course.find(1).destroy
 => false 
  

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

1. Можете ли вы сделать: c = Course.find(1); c.destroy; помещает c.errors.inspect

2. Ах, это сделало это! Выяснилось, что у меня был по крайней мере один объект «line_item», который принадлежал каждому из курсов, которые отказались удалять. Вывод .inspect был «{:base=> [«Присутствуют позиции «]}». Сначала сработало удаление line_items . Спасибо!

Ответ №1:

Включите каскадное уничтожение.

Конечно, имейте, по крайней мере, одно отношение «имеет много» или «имеет одно» с другой моделью.Что-то вроде

 class Course < ActiveRecord::Base
  has_many :somethings
  has one : something
end
  

сделайте это

 class Course < ActiveRecord::Base
  has_many :somethings, :dependent => :destroy
  has one :something, :dependent => :destroy
end
  

Вы также можете использовать

  accepts_nested_attributes_for :something, :allow_destroy => true
  

Удачи!!!

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

1. Рад вам помочь. Добро пожаловать!