category.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:2k
源码类别:

Ajax

开发平台:

Others

  1. class Category < ActiveRecord::Base
  2.   acts_as_list
  3.   acts_as_tree :order=>"name"
  4.   has_many :categorizations
  5.   has_many :articles,
  6.     :through => :categorizations,
  7.     :order   => "published_at DESC, created_at DESC"
  8.   default_scope :order => 'position ASC'
  9.   module Finders
  10.     def find_all_with_article_counters(maxcount=nil)
  11.       self.find_by_sql([%{
  12.       SELECT categories.id, categories.name, categories.permalink, categories.position, COUNT(articles.id) AS article_counter
  13.       FROM #{Category.table_name} categories
  14.         LEFT OUTER JOIN #{Category.table_name_prefix}categorizations#{Category.table_name_suffix} articles_categories
  15.           ON articles_categories.category_id = categories.id
  16.         LEFT OUTER JOIN #{Article.table_name} articles
  17.           ON (articles_categories.article_id = articles.id AND articles.published = ?)
  18.       GROUP BY categories.id, categories.name, categories.position, categories.permalink
  19.       ORDER BY position
  20.       }, true]).each {|item| item.article_counter = item.article_counter.to_i }
  21.     end
  22.     def find_by_permalink(permalink, options = {})
  23.       with_scope(:find => options) do
  24.         find(:first, :conditions => {:permalink => permalink}) or
  25.           raise ActiveRecord::RecordNotFound
  26.       end
  27.     end
  28.   end
  29.   extend Finders
  30.   def self.to_prefix
  31.     'category'
  32.   end
  33.   def self.reorder(serialized_list)
  34.     self.transaction do
  35.       serialized_list.each_with_index do |cid,index|
  36.         find(cid).update_attribute "position", index
  37.       end
  38.     end
  39.   end
  40.   def self.reorder_alpha
  41.     reorder find(:all, :order => 'UPPER(name)').collect { |c| c.id }
  42.   end
  43.   def stripped_name
  44.     self.name.to_url
  45.   end
  46.   def published_articles
  47.     articles.already_published
  48.   end
  49.   def display_name
  50.     name
  51.   end
  52.   def permalink_url(anchor=nil, only_path=true)
  53.     blog = Blog.default # remove me...
  54.     blog.url_for(
  55.       :controller => '/categories',
  56.       :action => 'show',
  57.       :id => permalink
  58.     )
  59.   end
  60.   def to_atom(xml)
  61.     xml.category :term => permalink, :label => name, :scheme => permalink_url
  62.   end
  63.   def to_rss(xml)
  64.     xml.category name
  65.   end
  66.   def to_param
  67.     permalink
  68.   end
  69.   protected
  70.   before_save :set_defaults
  71.   def set_defaults
  72.     self.permalink ||= self.stripped_name
  73.   end
  74.   validates_presence_of :name
  75.   validates_uniqueness_of :name, :on => :create
  76. end