Sha256: ab49d8f36392208c099855298141f80215bb299a38c84e3e3171f8b5960885a3

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

class Asset < ActiveRecord::Base
  belongs_to :user
  belongs_to :content, :polymorphic => true
  has_many :classifications, :dependent => :destroy
  has_many :labelings, :through => :classifications
  has_many :tray_positions, :dependent => :destroy

  validates_associated :content
  validates_presence_of :name,:content_type

  after_create :put_on_tray

  def publish=(test)
  end
  def published=(test)
  end
  def published
    1
  end
  def self.filter(filter)
    options = {:select => "assets.*", :order => "name"}
    unless filter.empty?
      options[:joins] = "LEFT OUTER JOIN labelings ON labelings.classification_id=classifications.id"
      options[:conditions] = filter.to_condition
      options[:group] = "assets.id HAVING COUNT(label_id)=#{filter.size}"
    end
    all options
  end

  def self.count_for_labels(filter)
    options = {:include => [:labelings], :group => "label_id"}
    unless filter.empty?
      options[:conditions] = "assets.id IN(
          SELECT DISTINCT assets.id 
            FROM assets 
              LEFT OUTER JOIN classifications ON (assets.id = classifications.asset_id) 
              LEFT OUTER JOIN labelings ON (labelings.classification_id=classifications.id) 
            WHERE (#{filter.to_condition}) 
            GROUP BY assets.id 
          HAVING COUNT(label_id)=#{filter.size})"
          filter.to_condition
    end
    count options
  end

  def put_on_tray
    return if user.nil?

    tray_positions.create(:user_id => user.id, :asset_id => id, :position => user.tray_positions.maximum(:position) ? user.tray_positions.maximum(:position)+1 : 1)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fassets_core-0.2.0 app/models/asset.rb