A plan
имеет много plan_dates
. Это тривиальный пример из моей консолиRuby destroy не работает? Или объекты все еще присутствуют?
a = Plan.create
a.plan_dates.create(ddate: Date.today)
a.plan_dates.create(ddate: Date.today + 1.days)
a.plan_dates.create(ddate: Date.today + 2.days)
a.plan_dates.count
# => 3
a.plan_dates.each { |pd| puts pd.ddate }
# => 2015-06-06 00:00:00 UTC
# => 2015-06-07 00:00:00 UTC
# => 2015-06-08 00:00:00 UTC
Когда я уничтожить plan_date, count
следит за ней, но each
не:
a.plan_dates.find_by_ddate(Date.today.to_datetime).destroy
a.plan_dates.count
# => 2
a.plan_dates.each { |pd| puts pd.ddate }
# => 2015-06-06 00:00:00 UTC
# => 2015-06-07 00:00:00 UTC
# => 2015-06-08 00:00:00 UTC
a.plan_dates[0].ddate
# => Sat, 06 Jun 2015 00:00:00 UTC +00:00
a.plan_dates[1].ddate
# => Sun, 07 Jun 2015 00:00:00 UTC +00:00
a.plan_dates[2].ddate
# => Mon, 08 Jun 2015 00:00:00 UTC +00:00
Я понимаю, что рубин удаляет записи из БД, но замерзает объекты, поэтому они все еще там, хотя между прочим:
a.plan_dates.each { |pd| puts pd.frozen? }
# => false
# => false
# => false
Я бы ожидал, что это будет true
для первого э.р. что я уничтожил. Как и как:
a.destroy
a.frozen?
# => true
Какой метод использовать для перебора только существующих записей? Что-то вроде each_non_frozen
. Кроме того, как объект фактически удаляется из массива? Я вызываю методы с конкретными параметрами plan_dates, например a.plan_date[0]
, и я либо хочу увидеть nil
, либо Sun, 07 Jun 2015 00:00:00 UTC +00:00
.
Это было БОЛЬШОЕ объяснение! – james