1 class Tag < ActiveRecord::Base 2 has_and_belongs_to_many :products 3 validates_presence_of :name 4 validates_uniqueness_of :name, :scope => :client_id 5 6 def self.find_alpha(client) 7 find(:all, :conditions => ['client_id = ?', client.id ], :order => 'name ASC') 8 end 9 10 def self.find_related_tags(tag_id_list) 11 tag_id_list_string = tag_id_list.join(",") 12 sql = "SELECT DISTINCT t.* FROM products_tags pt, tags t WHERE pt.product_id IN " 13 sql << " ( SELECT products.id " 14 sql << " FROM products " 15 sql << " JOIN products_tags on products.id = products_tags.product_id " 16 sql << " WHERE products_tags.tag_id IN (#{tag_id_list_string}) " 17 sql << " GROUP BY products.id HAVING COUNT(*)=#{tag_id_list.length} ) " 18 sql << "AND t.id = pt.tag_id " 19 sql << "AND t.id NOT IN (#{tag_id_list_string})" 20 return find_by_sql(sql) 21 end 22 23 # Returns the number of products tagged with this item 24 def self.product_count 25 self.products.size 26 end 27 end >> Tag.methods.include? 'find_alpha' => false >> Tag.methods.include? 'find_related_tags' => false >> Tag.methods.include? 'product_count' => false