You have written ActiveRecord queries for years. You know .where, .joins, .group, .having. You can chain scopes in your sleep. But I would bet real money you cannot write a WINDOW function from scratch. You probably cannot write a recursive CTE. You might struggle with a self-join that is not wrapped in a Rails scope. That is the gap this module fills.
Head First SQL will feel too easy. Good. Let it. It rebuilds your foundation the way stretching rebuilds flexibility -- you do not notice the weakness until something tears. Learning SQL goes deeper, into subqueries, set operations, and the relational algebra underneath. Together they take about three weeks. Do not skip either one, and do not rush them. The temptation will be to skim Head First because you "already know this." You know it through ActiveRecord. That is not the same thing.
Here is the humbling moment that is coming: you will realize that User.where(active: true).order(:created_at).limit(10) generates SQL you should have been able to write by hand all along. Not just write -- understand. Understand why the database chooses a sequential scan versus an index scan, why the ORDER BY matters for performance, why LIMIT without ORDER BY gives you nondeterministic results. ActiveRecord hides all of this. It hides it well, which is why you never noticed.
The goal of this module is not to replace ActiveRecord. It is to make you dangerous with ActiveRecord -- someone who reads the .to_sql output before deploying, who knows when the ORM is generating garbage, and who can drop into raw SQL when the abstraction leaks. Every senior Rails developer I respect can do this. Most Rails developers I have seen in interviews cannot.