1

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

但是,当计划最初有间隔但它们以形式(通过传递_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 标记时间表。但理想情况下,解决方案将与客户无关。

4

1 回答 1

2

如何将其添加到 Owner 类:

before_update do 
  schedules.each |schedule|
    schedule.destroy if schedule.intervals.empty?
  end
end
于 2013-02-05T16:18:05.217 回答