class Library < ActiveRecord::Base include AASM belongs_to :user has_many :library_applies, dependent: :delete_all has_many :attachments, as: :container has_many :library_library_tags, dependent: :delete_all has_many :library_tags, through: :library_library_tags attr_accessible :title, :content validates :title, presence: true validates :content, presence: true validates :uuid, presence: true, uniqueness: true acts_as_attachable aasm(:status) do state :pending, initiali: true state :processing state :refused state :published event :submit do transitions from: [:pending, :refused], to: :processing end event :refuse do transitions from: :processing, to: :refused end event :publish do transitions from: :processing, to: :published end end def generate_uuid uuid = Util.generate_time_uuid while Library.exists?(uuid: uuid) uuid = Util.generate_time_uuid end self.uuid = uuid end def increment_visited_count! Library.connection.execute("update libraries set visited_count = COALESCE(visited_count, 0) + 1 where id = #{id}") end end