只有在使用Mongoid嵌入文档时才保留文档?

时间:2013-02-05 13:36:16

标签: mongoid activemodel

我有一个2级嵌套表单(很像this),包含以下类。我遇到的问题是,当我不添加任何间隔(最深的嵌入文档)时,我不希望第二个最深的文档也被保留。在所有者中,我添加了拒绝声明,以检查是否有任何间隔传递,这是有效的。

但是,当时间表最初有间隔但是它们在表单中被销毁时(通过传递_destroy:true),时间表也需要被销毁。最好的方法是什么?我想避免在持久化后销毁文档的时间表上回调。

class Owner
  include Mongoid::Document  
  embeds_many :schedules

  attr_accessible :schedules_attributes

  accepts_nested_attributes_for :schedules, allow_destroy: true, reject_if: :no_intervals?

  def no_intervals?(attributes)
    attributes['intervals_attributes'].nil?
  end      
end

class Schedule
  include Mongoid::Document
  embeds_many :intervals
  embedded_in :owner

  attr_accessible :days, :intervals_attributes

  accepts_nested_attributes_for :intervals,
                                allow_destroy: true,
                                reject_if: :all_blank
end

class Interval
  include Mongoid::Document
  embedded_in :schedule
end

更新:也许这最好在表单中完成?如果所有间隔都标有_destroy:true,则还要使用_destroy:true标记计划。但理想情况下,解决方案将是客户端无关的。

1 个答案:

答案 0 :(得分:2)

如何将此添加到Owner类:

before_update do 
  schedules.each |schedule|
    schedule.destroy if schedule.intervals.empty?
  end
end