141 lines
3.3 KiB
Ruby
141 lines
3.3 KiB
Ruby
#require 'elasticsearch/model'
|
|
|
|
class Article < ApplicationRecord
|
|
#searchkick
|
|
|
|
has_many :popup_popupables, :as => :popupable
|
|
has_many :popups, :through => :popup_popupables
|
|
|
|
#include Elasticsearch::Model
|
|
#include Elasticsearch::Model::Callbacks
|
|
|
|
has_many :category_categoryables, :as => :categoryable
|
|
has_many :categories, :through => :category_categoryables
|
|
|
|
has_many :question_juridiques
|
|
|
|
has_many :menu_item_articles
|
|
has_many :menu_items, :through => :menu_item_articles
|
|
|
|
has_many :comments, :as => :commentable
|
|
|
|
belongs_to :image_file
|
|
belongs_to :without_text_image_file, :class_name => "ImageFile"
|
|
|
|
|
|
has_many :animal_animalables, :as => :animalable
|
|
has_many :animals, :through => :animal_animalables
|
|
|
|
|
|
|
|
has_many :blocks, :as => :blockable
|
|
|
|
belongs_to :category
|
|
has_many :enabled_comments,-> {where(:enabled => true)}, :source => :comments, :as => :commentable
|
|
after_create :after_creation
|
|
|
|
|
|
|
|
has_many :lang_articles, :dependent => :destroy
|
|
|
|
accepts_nested_attributes_for :lang_articles
|
|
|
|
has_many :tag_taggables, :as => :taggable
|
|
has_many :tags, :through => :tag_taggables
|
|
|
|
belongs_to :article_author
|
|
|
|
validates :published_at, :presence => true
|
|
|
|
attr_accessor :skip_block
|
|
|
|
|
|
before_validation do
|
|
self.categories << self.category if self.category
|
|
end
|
|
|
|
|
|
HUMAN_NAME = "lien vers un article."
|
|
|
|
def lang(locale)
|
|
self.lang_articles.find_by_lang_site_id(LangSite.find_by_slug(locale).id)
|
|
end
|
|
|
|
def name
|
|
self.lang_articles.first.title
|
|
end
|
|
|
|
def after_creation
|
|
|
|
if !skip_block
|
|
LangSite.all.each do |lang|
|
|
@block = Block.new(:block_name => "Contenu", :lang_site => lang)
|
|
@block.blockable = self
|
|
@block.save
|
|
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
def alloweds_types
|
|
self.block.allow_types :TitleContent, :TextContent, :ImageContent, :LinkContent, :GalleryContent, :HtmlContent
|
|
|
|
end
|
|
|
|
|
|
scope :recents, -> {order("articles.published_at DESC, articles.created_at DESC")}
|
|
|
|
scope :between, lambda { |start, stop|
|
|
after(start).before(stop)
|
|
}
|
|
|
|
scope :after, lambda { |date|
|
|
where("(articles.published_at >= ?)", date )
|
|
}
|
|
scope :before, lambda { |date|
|
|
where("(articles.published_at <= ?)", date )
|
|
}
|
|
|
|
|
|
|
|
#after_initialize do
|
|
# if self.published_at
|
|
# self.published_at = self.published_at.strftime('%d/%m/%Y')
|
|
# end
|
|
|
|
# end
|
|
|
|
# after_update do
|
|
# logger.debug ["Updating document... ", __elasticsearch__.delete_document, __elasticsearch__.index_document].join
|
|
|
|
# end
|
|
|
|
|
|
def search_data
|
|
{
|
|
html: lang_articles.map(&:html),
|
|
title: lang_articles.map(&:title),
|
|
description: lang_articles.map(&:description),
|
|
category_names: (category.name if category).to_s,
|
|
category_ids: (category.id if category),
|
|
animals_names: animals.map(&:name),
|
|
animals_ids: animals.map(&:id),
|
|
document: "article",
|
|
created_at: published_at
|
|
}
|
|
end
|
|
|
|
def as_indexed_json(options={})
|
|
self.as_json(
|
|
include: { lang_articles: { methods: [:html], only: [:title, :description, :html]}#,
|
|
# authors: { methods: [:full_name], only: [:full_name] },
|
|
# comments: { only: :text }
|
|
})
|
|
end
|
|
|
|
|
|
end
|
|
|
|
#Article.import
|