Use the friendly ID gem for contest slugs
All checks were successful
CI / scan_ruby (push) Successful in 18s
CI / scan_js (push) Successful in 10s
CI / lint (push) Successful in 11s
CI / test (push) Successful in 33s

This commit is contained in:
sto
2025-03-26 17:40:56 +01:00
parent a5d165c4b3
commit 2144c22bd9
12 changed files with 164 additions and 10 deletions

View File

@@ -0,0 +1,5 @@
class RemoveSlugFromContests < ActiveRecord::Migration[8.0]
def change
remove_column :contests, :slug, :string
end
end

View File

@@ -0,0 +1,6 @@
class AddSlugToContests < ActiveRecord::Migration[8.0]
def change
add_column :contests, :slug, :string
add_index :contests, :slug, unique: true
end
end

View File

@@ -0,0 +1,21 @@
MIGRATION_CLASS =
if ActiveRecord::VERSION::MAJOR >= 5
ActiveRecord::Migration["#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}"]
else
ActiveRecord::Migration
end
class CreateFriendlyIdSlugs < MIGRATION_CLASS
def change
create_table :friendly_id_slugs do |t|
t.string :slug, null: false
t.integer :sluggable_id, null: false
t.string :sluggable_type, limit: 50
t.string :scope
t.datetime :created_at
end
add_index :friendly_id_slugs, [ :sluggable_type, :sluggable_id ]
add_index :friendly_id_slugs, [ :slug, :sluggable_type ], length: { slug: 140, sluggable_type: 50 }
add_index :friendly_id_slugs, [ :slug, :sluggable_type, :scope ], length: { slug: 70, sluggable_type: 50, scope: 70 }, unique: true
end
end

14
db/schema.rb generated
View File

@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[8.0].define(version: 2025_03_26_153736) do
ActiveRecord::Schema[8.0].define(version: 2025_03_26_162920) do
create_table "active_storage_attachments", force: :cascade do |t|
t.string "name", null: false
t.string "record_type", null: false
@@ -71,9 +71,21 @@ ActiveRecord::Schema[8.0].define(version: 2025_03_26_153736) do
t.boolean "team", default: false
t.boolean "allow_registration", default: false
t.string "slug"
t.index ["slug"], name: "index_contests_on_slug", unique: true
t.index ["user_id"], name: "index_contests_on_user_id"
end
create_table "friendly_id_slugs", force: :cascade do |t|
t.string "slug", null: false
t.integer "sluggable_id", null: false
t.string "sluggable_type", limit: 50
t.string "scope"
t.datetime "created_at"
t.index ["slug", "sluggable_type", "scope"], name: "index_friendly_id_slugs_on_slug_and_sluggable_type_and_scope", unique: true
t.index ["slug", "sluggable_type"], name: "index_friendly_id_slugs_on_slug_and_sluggable_type"
t.index ["sluggable_type", "sluggable_id"], name: "index_friendly_id_slugs_on_sluggable_type_and_sluggable_id"
end
create_table "puzzles", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false