Skip to content
Snippets Groups Projects
article.rb 2.3 KiB
Newer Older
Arnaud Levy's avatar
Arnaud Levy committed
# == Schema Information
#
# Table name: research_journal_articles
#
#  id                         :uuid             not null, primary key
Arnaud Levy's avatar
Arnaud Levy committed
#  abstract                   :text
Arnaud Levy's avatar
Arnaud Levy committed
#  keywords                   :text
pabois's avatar
pabois committed
#  old_text                   :text
Arnaud Levy's avatar
Arnaud Levy committed
#  published_at               :date
Arnaud Levy's avatar
Arnaud Levy committed
#  references                 :text
Arnaud Levy's avatar
Arnaud Levy committed
#  title                      :string
#  created_at                 :datetime         not null
pabois's avatar
pabois committed
#  updated_at                 :datetime         not null
Arnaud Levy's avatar
Arnaud Levy committed
#  research_journal_id        :uuid             not null
#  research_journal_volume_id :uuid
#  university_id              :uuid             not null
Arnaud Levy's avatar
Arnaud Levy committed
#  updated_by_id              :uuid
Arnaud Levy's avatar
Arnaud Levy committed
#
# Indexes
#
#  index_research_journal_articles_on_research_journal_id         (research_journal_id)
#  index_research_journal_articles_on_research_journal_volume_id  (research_journal_volume_id)
#  index_research_journal_articles_on_university_id               (university_id)
Arnaud Levy's avatar
Arnaud Levy committed
#  index_research_journal_articles_on_updated_by_id               (updated_by_id)
Arnaud Levy's avatar
Arnaud Levy committed
#
# Foreign Keys
#
#  fk_rails_...  (research_journal_id => research_journals.id)
#  fk_rails_...  (research_journal_volume_id => research_journal_volumes.id)
#  fk_rails_...  (university_id => universities.id)
Arnaud Levy's avatar
Arnaud Levy committed
#  fk_rails_...  (updated_by_id => users.id)
Arnaud Levy's avatar
Arnaud Levy committed
#
class Research::Journal::Article < ApplicationRecord
Arnaud Levy's avatar
Arnaud Levy committed
  include WithGit
pabois's avatar
pabois committed
  has_rich_text :text
pabois's avatar
pabois committed
  has_one_attached :pdf
pabois's avatar
pabois committed

Arnaud Levy's avatar
Arnaud Levy committed
  belongs_to :university
  belongs_to :journal, foreign_key: :research_journal_id
  belongs_to :volume, foreign_key: :research_journal_volume_id, optional: true
Arnaud Levy's avatar
Arnaud Levy committed
  belongs_to :updated_by, class_name: 'User'
pabois's avatar
pabois committed
  has_and_belongs_to_many :researchers,
                          class_name: 'Administration::Member',
                          join_table: :research_journal_articles_researchers,
                          association_foreign_key: :researcher_id
pabois's avatar
pabois committed
  has_many :websites, -> { distinct }, through: :journal
Arnaud Levy's avatar
Arnaud Levy committed

pabois's avatar
pabois committed
  validates :title, :published_at, presence: true
Arnaud Levy's avatar
Arnaud Levy committed

Arnaud Levy's avatar
Arnaud Levy committed
  scope :ordered, -> { order(:published_at, :created_at) }

Arnaud Levy's avatar
Arnaud Levy committed
  def pdf_path
    "/assets/articles/#{id}/#{pdf.filename}"
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def git_path_static
    "content/articles/#{published_at.year}/#{published_at.strftime "%Y-%m-%d"}-#{slug}.html" if published_at
Arnaud Levy's avatar
Arnaud Levy committed
  end

  def git_dependencies_static
    researchers
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def to_s
    "#{ title }"
  end
end