summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/node.rb2
-rw-r--r--db/migrate/20260809135746_remove_external_url_from_nodes.rb5
-rw-r--r--db/seeds/chapters.rb3
-rw-r--r--lib/tasks/pages.rake61
-rw-r--r--test/models/node_test.rb1
5 files changed, 7 insertions, 65 deletions
diff --git a/app/models/node.rb b/app/models/node.rb
index a401ed69..6fc6c3dc 100644
--- a/app/models/node.rb
+++ b/app/models/node.rb
@@ -257,8 +257,6 @@ class Node < ApplicationRecord
257 self.slug = self.head.slug 257 self.slug = self.head.slug
258 end 258 end
259 259
260 self.external_url = self.head.external_url
261
262 if self.head.parent_node_id && self.head.parent_node_id != parent_id 260 if self.head.parent_node_id && self.head.parent_node_id != parent_id
263 new_parent = Node.find_by(:id => self.head.parent_node_id) 261 new_parent = Node.find_by(:id => self.head.parent_node_id)
264 262
diff --git a/db/migrate/20260809135746_remove_external_url_from_nodes.rb b/db/migrate/20260809135746_remove_external_url_from_nodes.rb
new file mode 100644
index 00000000..0510d053
--- /dev/null
+++ b/db/migrate/20260809135746_remove_external_url_from_nodes.rb
@@ -0,0 +1,5 @@
1class RemoveExternalUrlFromNodes < ActiveRecord::Migration[8.1]
2 def change
3 remove_column :nodes, :external_url, :string
4 end
5end
diff --git a/db/seeds/chapters.rb b/db/seeds/chapters.rb
index 4d81e3cc..ba14252c 100644
--- a/db/seeds/chapters.rb
+++ b/db/seeds/chapters.rb
@@ -30,12 +30,13 @@ def seed_chapter(parent_id:, slug:, tag:, title_de:, description_de:,
30 end 30 end
31 31
32 # Create node 32 # Create node
33 node = parent.children.create!(slug: slug, external_url: external_url) 33 node = parent.children.create!(slug: slug)
34 node.reload 34 node.reload
35 35
36 # Set up draft with German translation 36 # Set up draft with German translation
37 draft = node.draft 37 draft = node.draft
38 draft.template_name = 'chapter_detail' 38 draft.template_name = 'chapter_detail'
39 draft.external_url = external_url
39 I18n.with_locale(:de) do 40 I18n.with_locale(:de) do
40 draft.title = title_de 41 draft.title = title_de
41 draft.abstract = location || "" 42 draft.abstract = location || ""
diff --git a/lib/tasks/pages.rake b/lib/tasks/pages.rake
deleted file mode 100644
index ea0776b7..00000000
--- a/lib/tasks/pages.rake
+++ /dev/null
@@ -1,61 +0,0 @@
1namespace :pages do
2 desc "Backfill pages.slug and pages.parent_node_id from each page's " \
3 "node. Historical accuracy is not attempted. Every revision gets " \
4 "the node's current address, which is right for head and draft and " \
5 "harmless for older revisions, and avoids nil checks everywhere. " \
6 "Dry run unless WRITE=1."
7 task :backfill_address => :environment do
8 write = ENV["WRITE"] == "1"
9 puts "DRY RUN -- nothing written. Re-run with WRITE=1." unless write
10
11 touched = 0
12 Node.find_each do |node|
13 scope = node.pages.where("slug IS DISTINCT FROM :s OR parent_node_id IS DISTINCT FROM :p",
14 :s => node.slug, :p => node.parent_id)
15 count = scope.count
16 next if count.zero?
17
18 scope.update_all(:slug => node.slug, :parent_node_id => node.parent_id) if write
19 touched += count
20 end
21
22 # Autosaves carry no node_id -- has_many :pages does not cover them.
23 Node.where.not(:autosave_id => nil).includes(:autosave).find_each do |node|
24 a = node.autosave
25 next if a.slug == node.slug && a.parent_node_id == node.parent_id
26
27 a.update_columns(:slug => node.slug, :parent_node_id => node.parent_id) if write
28 touched += 1
29 end
30
31 puts "#{write ? "updated" : "would update"} #{touched} pages"
32 end
33
34 desc "Backfill pages.external_url from each page's node."
35 task :backfill_external_url => :environment do
36 write = ENV["WRITE"] == "1"
37 puts "DRY RUN -- nothing written. Re-run with WRITE=1." unless write
38
39 touched = 0
40 Node.where.not(:external_url => [nil, ""]).find_each do |node|
41 scope = node.pages.where("external_url IS DISTINCT FROM :u", :u => node.external_url)
42 count = scope.count
43 next if count.zero?
44
45 scope.update_all(:external_url => node.external_url) if write
46 touched += count
47 end
48
49 # Autosaves carry no node_id, so has_many :pages does not cover them.
50 Node.where.not(:autosave_id => nil).where.not(:external_url => [nil, ""])
51 .includes(:autosave).find_each do |node|
52 a = node.autosave
53 next if a.nil? || a.external_url == node.external_url
54
55 a.update_columns(:external_url => node.external_url) if write
56 touched += 1
57 end
58
59 puts "#{write ? "updated" : "would update"} #{touched} pages"
60 end
61end
diff --git a/test/models/node_test.rb b/test/models/node_test.rb
index 735d2abe..39be6d32 100644
--- a/test/models/node_test.rb
+++ b/test/models/node_test.rb
@@ -1077,7 +1077,6 @@ class NodeTest < ActiveSupport::TestCase
1077 node.draft.update!(:external_url => "https://example.org") 1077 node.draft.update!(:external_url => "https://example.org")
1078 node.publish_draft!(users(:aaron)) 1078 node.publish_draft!(users(:aaron))
1079 1079
1080 assert_equal "https://example.org", node.reload.external_url
1081 assert_equal "https://example.org", node.head.external_url 1080 assert_equal "https://example.org", node.head.external_url
1082 end 1081 end
1083 1082