class Design include Mongoid::Document include Mongoid::Timestamps field :title field :author field :intro field :version validates_presence_of :title validates_presence_of :author has_many :pages embeds_one :layout mount_uploader :default_css, AssetUploader embeds_many :themes embeds_many :javascripts embeds_many :images after_save :procs_embedded_objects # after_destroy :del_embedded_objects def javascripts=(*attrs) self.files = (attrs << 'javascripts') end def themes=(*attrs) self.files = (attrs << 'themes') end def images=(*attrs) self.files = (attrs << 'images') end # Update or create the attribute_model records def files=(attrs) case attrs.last when 'layout' files = self.layout.build else files = eval(attrs.last) end attrs[0].each do |a| if(a[:id]=='' && !a[:file].nil? ) if(a[:file]!='') files.build(:file => a[:file], :to_save => true) end else files.each do |file| if file.id.to_s == a[:id] file.to_destroy = a[:to_destroy] end end end end end protected def del_embedded_objects [[self.layout],self.themes, self.javascripts, self.images].each do |objects| objects.each do |object| object.destroy end end end def procs_embedded_objects [self.javascripts, self.images].each do |objects| objects.each do |object| process_object(object) end end if self.layout.to_save self.layout.save self.layout.parse_urls end self.themes.each do |theme| to_parse_url = theme.to_save ? true : false process_object(theme) theme.parse_urls if to_parse_url end end def process_object(object) if object.file.blank? object.to_save = false end if object.to_save object.to_save = false object.save end if object.to_destroy object.destroy end end end