You need to sign in or sign up before continuing.
Newer
Older
# == Schema Information
#
# Table name: research_journal_articles
#
# id :uuid not null, primary key
# position :integer
# published :boolean default(FALSE)
# slug :string
# research_journal_id :uuid not null
# research_journal_volume_id :uuid
# university_id :uuid not null
#
# 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)
# index_research_journal_articles_on_updated_by_id (updated_by_id)
#
# 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)
belongs_to :university
belongs_to :journal, foreign_key: :research_journal_id
belongs_to :volume, foreign_key: :research_journal_volume_id, optional: true
join_table: :research_journal_articles_researchers,
association_foreign_key: :researcher_id
before_validation :set_published_at, if: :published_changed?
scope :published, -> { where(published: true) }
"content/articles/#{published_at.year}/#{published_at.strftime "%Y-%m-%d"}-#{slug}.html" if (volume.nil? || volume.published_at) && published_at
[self] +
other_articles_in_the_volume +
persons +
persons.map(&:researcher)
def other_articles_in_the_volume
return [] if volume.nil?
volume.articles.where.not(id: self)
end
def last_ordered_element
Research::Journal::Article.where(
university_id: university_id,
research_journal_volume_id: research_journal_volume_id
).ordered.last
end
def set_published_at
self.published_at = published? ? Time.zone.now : nil
end