class Design include Mongoid::Document include Mongoid::Timestamps field :title field :author field :intro field :version validates_presence_of :title validates_presence_of :author mount_uploader :layout, DesignFileUploader embeds_many :stylesheets embeds_many :javascripts embeds_many :images before_save :cleanup_empty_fields after_save :procs_embedded_objects def javascripts=(*attrs) self.files = (attrs << 'javascripts') end def stylesheets=(*attrs) self.files = (attrs << 'stylesheets') end def images=(*attrs) self.files = (attrs << 'images') end # Update or create the attribute_model records def files=(attrs) files = eval(attrs.last) attrs[0].each do |a| files.build(:file => a[:file], :to_save => true) end end protected def cleanup_empty_fields end def procs_embedded_objects [self.stylesheets, self.javascripts, self.images].each do |objects| objects.each do |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 end end