#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. Рад вам помочь. Добро пожаловать!