87 lines
2.0 KiB
Ruby
87 lines
2.0 KiB
Ruby
#require 'elasticsearch/model'
|
|
|
|
|
|
class VideoFile < ActiveRecord::Base
|
|
#searchkick
|
|
# include Elasticsearch::Model
|
|
# include Elasticsearch::Model::Callbacks
|
|
|
|
has_many :animal_animalables, :as => :animalable
|
|
has_many :animals, :through => :animal_animalables
|
|
|
|
has_many :category_categoryables, :as => :categoryable
|
|
has_many :categories, :through => :category_categoryables
|
|
|
|
|
|
belongs_to :video_folder
|
|
belongs_to :image_file
|
|
belongs_to :investigation_cat
|
|
|
|
has_many :video_file_langs, :dependent => :destroy
|
|
accepts_nested_attributes_for :video_file_langs
|
|
|
|
|
|
scope :recents, -> {where(:public => true).order("video_files.position ASC, video_files.created_at DESC")}
|
|
|
|
scope :lang, lambda { |lang|
|
|
if lang == "fr"
|
|
where(:fr => true)
|
|
else
|
|
where(:en => true)
|
|
end
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def generate_token()
|
|
begin
|
|
self[:token] = SecureRandom.urlsafe_base64
|
|
end while DataFile.exists?(:token => self[:token])
|
|
end
|
|
|
|
before_create { generate_token() }
|
|
|
|
mount_uploader :poster, ImageUploader
|
|
mount_uploader :mpg, VideoUploader
|
|
mount_uploader :ogg, VideoUploader
|
|
mount_uploader :webm, VideoUploader
|
|
|
|
def lang(locale)
|
|
self.video_file_langs.find_by_lang_site_id(LangSite.find_by_slug(locale).id)
|
|
end
|
|
|
|
|
|
|
|
#after_update do
|
|
# logger.debug ["Updating document... ", __elasticsearch__.delete_document, __elasticsearch__.index_document].join
|
|
|
|
# end
|
|
|
|
def search_data
|
|
{
|
|
title: video_file_langs.map(&:title),
|
|
description: video_file_langs.map(&:description),
|
|
category_names: (categories.map(&:name)),
|
|
category_ids: (categories.map(&:id)),
|
|
animals_names: (animals.map(&:name)),
|
|
animals_ids: (animals.map(&:id)),
|
|
document: "video",
|
|
created_at: created_at
|
|
|
|
}
|
|
end
|
|
|
|
|
|
def as_indexed_json(options={})
|
|
self.as_json(
|
|
include: { video_file_langs: { only: [:title, :description]}
|
|
})
|
|
end
|
|
|
|
end
|
|
|
|
#VideoFile.import(:force => true)
|