class Asset < ApplicationRecord
|
|
|
|
STICKER = 'Sticker'
|
|
|
|
has_one_attached :file
|
|
|
|
include PgSearch::Model
|
|
pg_search_scope :pg_search,
|
|
against: [:title, :tags],
|
|
associated_against: {
|
|
file_blob: [:filename, :content_type]
|
|
},
|
|
using: {
|
|
tsearch: { prefix: true }
|
|
}
|
|
|
|
before_validation :remove_empty_tags
|
|
|
|
scope :stickets, ->() { where("tags @> ?", "{#{STICKER}}") }
|
|
|
|
scope :by_last_modified, ->(rev) { order(updated_at: rev ? :asc : :desc, id: rev ? :desc : :asc) }
|
|
scope :by_filename, ->(rev) { order(title: rev ? :desc : :asc) }
|
|
scope :simple_search, ->(q) { pg_search(q) unless q.blank? }
|
|
|
|
|
|
private
|
|
|
|
def remove_empty_tags
|
|
%w"tags".map do |k|
|
|
self.send "#{k}=", self.send(k).reject { |v| v.blank? } unless self.send(k).blank?
|
|
end
|
|
end
|
|
|
|
end
|