🚀 Optimizing Slug Generation in Rails


🔍 Problem with Naive Slugging

Earlier, slugs were generated in a loop, trying different suffixes like:

title_slug = title.parameterize
"#{title_slug}-#{i}"

Each iteration queried the database to check uniqueness:

Task.exists?(slug: slug_candidate)

⚠️ Problem: Expensive for large datasets—hundreds of DB calls.


✅ Efficient Slugging with LIKE

Instead of checking every possible slug, fetch all existing similar slugs with one query:

# syntax
table_name.where("column_name LIKE ?", pattern)

title_slug = title.parameterize
count = Task.where("slug LIKE ?", "#{title_slug}%").size

Then assign:

slug = count.positive? ? "#{title_slug}-#{count + 1}" : title_slug

✅ Only one query, avoids N iterations.


🧪 Edge Cases in LIKE

Case 1: Deleted middle slug