// the find
norman/friendly_id
FriendlyId is the “Swiss Army bulldozer” of slugging and permalink plugins for ActiveRecord. It allows you to create pretty URL’s and work with human-friendly strings as if they were numeric ids for ActiveRecord models.
FriendlyId handles slug generation and pretty URLs for ActiveRecord models — think `/posts/my-great-article` instead of `/posts/42`. It's been the standard Rails solution for this problem since 2008, and it covers the edge cases that a naive `parameterize` call misses: slug history so old URLs still work after renames, scoped slugs, reserved words, i18n, and sequential disambiguation when two records share the same name.
Slug history is the killer feature — when a user renames their profile from 'joe' to 'joseph', the old `/users/joe` URL still resolves, which matters for SEO and external links. Scoped slugs let two records share the same slug under different parents (two posts named 'intro' under different categories) without a conflict. Rails version coverage is solid: Gemfiles go up through Rails 8.0, and CI runs against all of them. The plugin architecture is clean — you opt into only what you need (`use: [:slugged, :history]`) rather than paying for features you don't want.
The `User.find_each(&:save)` backfill advice in the README will trigger your callbacks and validations on every record — on a large table that's a foot-gun waiting to happen, and the docs don't warn you. The `friendly.find` API means you have to remember to change every finder in your codebase; miss one and you'll silently accept numeric IDs alongside slugs, which makes your URL scheme inconsistent. The history table grows without bound — there's no built-in pruning, so a model with frequent renames accumulates stale slugs forever. Last meaningful commit activity has slowed; 589 forks with a number of open PRs suggests the maintainer bandwidth is thin.