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

60 lines
1.2 KiB

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