Sha256: 15bca9d5067b1fd9b353e6e5d0e27ff90a0d560f2b909627158ff908876bbfe8
Contents?: true
Size: 1.78 KB
Versions: 1
Compression:
Stored size: 1.78 KB
Contents
module Thesis class Page < ActiveRecord::Base attr_accessor :editable self.table_name = "pages" belongs_to :parent, class_name: "Page" has_many :subpages, -> { order(:sort_order) }, class_name: "Page", foreign_key: "parent_id" has_many :page_contents, dependent: :destroy before_create :set_name before_save :update_slug # Do we even want to do this? after_save :update_subpage_slugs validates :slug, uniqueness: { message: "There's already a page at that location." }, presence: true, allow_blank: true, allow_null: false def set_name self.name ||= self.slug.to_s.split("/").last.to_s.humanize if self.slug end def update_slug self.name ||= "" self.slug = "/" << self.name.parameterize self.slug = "#{parent.slug.to_s}#{self.slug.to_s}" if parent end def update_subpage_slugs subpages.each(&:save) if slug_changed? end def content(name, content_type = :html, opts = {}) find_or_create_page_content(name, content_type, opts).render(editable: self.editable) end def path self.slug end protected def find_or_create_page_content(name, content_type, opts = {}) page_content = self.page_contents.where(name: name).first_or_create do |pc| pc.content = opts[:default] || "<p>Edit This HTML Area</p>" if content_type == :html pc.content = opts[:default] || "Edit This Text Area" if content_type == :text width = opts[:width] || 350 height = opts[:height] || 150 pc.content = opts[:default] || "http://placehold.it/#{width}x#{height}" if content_type == :image end page_content.content_type = content_type page_content.save if page_content.changed? page_content end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
thesis-0.1.3 | lib/thesis/models/page.rb |