app/models/page.rb in tkh_content-0.1.6 vs app/models/page.rb in tkh_content-0.1.7
- old
+ new
@@ -5,12 +5,15 @@
class Page < ActiveRecord::Base
belongs_to :author, class_name: 'User', foreign_key: 'author_id'
- attr_accessible :title, :short_title, :description, :body, :for_blog, :parent_id
+ attr_accessible :title, :short_title, :description, :body, :for_blog, :parent_id, :tag_list, :parent_page_title
+ has_many :taggings
+ has_many :tags, through: :taggings
+
validates_presence_of :title
validates_presence_of :description
validates_presence_of :body
validates_presence_of :author_id
@@ -26,35 +29,73 @@
scope :published, where('published_at IS NOT ?', nil)
scope :by_recently_published, order('published_at desc')
# tree scopes
scope :orphans, where('parent_id IS ?', nil)
scope :with_parent_id, lambda { |id| where('parent_id = ?', id) }
+ scope :by_title, order('title')
def nickname
short_title || title
end
+ ### menu related instance methods
+
def orphan?
parent_id == nil
end
def has_children?
- Page.with_parent_id(id).count >= 1
+ Page.with_parent_id(id).published.count >= 1
end
def children
- Page.with_parent_id(id)
+ Page.published.with_parent_id(id)
end
def parent
Page.find(parent_id)
end
def has_siblings?
- Page.with_parent_id(parent_id).count >= 1
+ Page.with_parent_id(parent_id).published.count >= 1
end
def siblings
- Page.with_parent_id(parent_id)
+ Page.published.with_parent_id(parent_id)
+ end
+
+ ### tagging related methods
+
+ def self.tagged_with(name)
+ Tag.find_by_name!(name).pages
+ end
+
+ def self.tag_counts
+ Tag.select("tags.*, count(taggings.tag_id) as count").
+ joins(:taggings).group("taggings.tag_id")
+ end
+
+ def tag_list
+ tags.map(&:name).join(" ")
+ end
+
+ def tag_list=(names)
+ self.tags = names.split(" ").map do |n|
+ Tag.where(name: n.strip).first_or_create!
+ end
+ end
+
+ ### autocomplete related instance methods
+
+ def parent_page_title
+ parent.try(:title) unless self.orphan?
+ end
+
+ def parent_page_title=(title)
+ if title.present? && Page.find_by_title(title)
+ self.parent_id = Page.find_by_title(title).id
+ else
+ self.parent_id = nil
+ end
end
end