class Annotation < ApplicationRecord acts_as_list column: :rank, scope: %i[doctrine_id] belongs_to :doctrine, optional: false belongs_to :document, polymorphic: true, optional: false has_many :annotation_documents, inverse_of: :annotation, dependent: :destroy accepts_nested_attributes_for :annotation_documents, allow_destroy: true has_many :annotation_annomarks, dependent: :destroy has_many :annomarks, through: :annotation_annomarks validates :content, presence: true def documents annotation_documents.collect(&:document) end def add_document(document) record = annotation_documents.new record.document = document record.save end def remove_document(document) annotation_documents.find_by(document_id: document.id).destroy end def citing_document_ids documents.map(&:id) end searchable do integer :document_id integer :doctrine_id integer :library_rank do document.library.rank end integer :search_year do document.year.present? && document.year > 0 ? document.year : (document.doc_date.try :year) end date :search_doc_date do document.doc_date.presence || Date.new(year.presence || 0) end date :created_at date :updated_at text :phil_rep string :phil_rep end end