【发布时间】:2015-06-07 00:32:27
【问题描述】:
一个plan 有很多plan_dates。这是我控制台中的一个简单示例
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
我知道 Ruby 从数据库中删除了记录但冻结了对象,所以它们仍然存在,尽管顺便说一句:
a.plan_dates.each { |pd| puts pd.frozen? }
# => false
# => false
# => false
对于我销毁的第一个 pd,我本来希望它是 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 返回。
【问题讨论】:
标签: ruby-on-rails ruby activerecord destroy