class Design include Mongoid::Document include Mongoid::Timestamps include ParserLayout field :author, :type => String field :intro, :type => String field :title, :type => String field :version, :type => String has_one :css_default, as: :css, :autosave => true, :dependent => :destroy has_one :layout, :autosave => true, :dependent => :destroy has_one :css_reset, :autosave => true, :dependent => :destroy has_many :images,as: :imgs, :autosave => true, :dependent => :destroy has_many :javascripts, as: :js, :autosave => true, :dependent => :destroy has_many :pages has_many :themes, :autosave => true, :dependent => :destroy accepts_nested_attributes_for :images, :allow_destroy => true accepts_nested_attributes_for :javascripts, :allow_destroy => true accepts_nested_attributes_for :themes, :allow_destroy => true validates_presence_of :author, :title after_save :parse_css_for_images def new_files=(*attrs) attrs[0].map do |key,items_ary| #Loop by JSs,Themes,Imgs self.files=([items_ary, key]) end end # 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 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].blank? && !a[:file].blank? files.build(:file => a[:file], :to_save => true) 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 parse_css_for_images self.css_default.parse_urls self.themes.each do |theme| theme.parse_urls end parse_body_for_images(self) end end