ぼざクリタグ広場 https://hub.nizika.monster
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

55 lines
1.3 KiB

  1. require 'set'
  2. class WikiPage < ApplicationRecord
  3. include MyDiscard
  4. has_many :wiki_revisions, dependent: :destroy
  5. belongs_to :created_user, class_name: 'User'
  6. belongs_to :updated_user, class_name: 'User'
  7. has_many :redirected_from_revisions,
  8. class_name: 'WikiRevision',
  9. foreign_key: :redirect_page_id,
  10. dependent: :nullify
  11. has_many :assets, class_name: 'WikiAsset', dependent: :destroy
  12. has_many :wiki_versions
  13. belongs_to :tag_name
  14. validates :tag_name, presence: true
  15. validates :body, presence: true
  16. def title = tag_name.name
  17. def title= val
  18. (self.tag_name ||= build_tag_name).name = val
  19. end
  20. def current_revision = wiki_revisions.order(id: :desc).first
  21. def resolve_redirect limit: 10
  22. page = self
  23. visited = Set.new
  24. limit.times do
  25. return page if visited.include?(page.id)
  26. visited.add(page.id)
  27. rev = page.current_revision
  28. return page if !(rev&.redirect?) || !(rev.redirect_page)
  29. page = rev.redirect_page
  30. end
  31. page
  32. end
  33. def pred_revision_id(revision_id) =
  34. wiki_revisions.where('id < ?', revision_id).order(id: :desc).limit(1).pick(:id)
  35. def succ_revision_id(revision_id) =
  36. wiki_revisions.where('id > ?', revision_id).order(id: :asc).limit(1).pick(:id)
  37. end