ぼざクリタグ広場 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.
 
 
 
 
 
 

49 lines
1.0 KiB

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