我有一个包含以下类的 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 标记时间表。但理想情况下,解决方案将与客户无关。