ActiveRecord INNER JOIN with Multiple Conditions (Without Lying to Yourself)
How to express INNER JOINs with multiple conditions in Rails without changing semantics by accident. Learn when Rails puts predicates in WHERE vs ON, how
Real solutions to SQL → ActiveRecord translation problems. Learn why your queries break, how to fix them, and what Rails actually generates.
New to ActiveRecord? These posts explain the mental model differences that cause bugs.
LEFT JOINs that become INNER JOINs, multiple conditions, and association gotchas
How to express INNER JOINs with multiple conditions in Rails without changing semantics by accident. Learn when Rails puts predicates in WHERE vs ON, how
LEFT JOIN queries often break the moment you add a WHERE on the joined table—silently turning into INNER JOIN behavior. Learn the correct Rails patterns (ON vs
Need a FULL OUTER JOIN in Rails? Learn why ActiveRecord doesn’t support it natively and the safest Postgres + UNION workarounds for production.
N+1 queries, includes() side effects, and when ActiveRecord makes things slower
A production-focused preview of Rails 8.2 explaining real-world impact on caching, TypeScript integration, Turbo behavior, and upgrade risks.
Copied SQL into Rails and still got N+1? Rewrote in ActiveRecord and still got N+1? The fix is a set-based mental model: where N+1 really comes from, how to
Ruby 4.0.0 is released (Dec 25, 2025). For Rails apps, the real risks are stdlib gem changes (CGI), Net::HTTP behavior shifts, and Bundler 4. Here’s what breaks
How to express INNER JOINs with multiple conditions in Rails without changing semantics by accident. Learn when Rails puts predicates in WHERE vs ON, how
Ruby 4.0.0 is released (Dec 25, 2025). For Rails apps, the real risks are stdlib gem changes (CGI), Net::HTTP behavior shifts, and Bundler 4. Here’s what breaks
Copied SQL into Rails and still got N+1? Rewrote in ActiveRecord and still got N+1? The fix is a set-based mental model: where N+1 really comes from, how to
If you know SQL, ActiveRecord can feel pointless—until it saves you from consistency bugs. Here’s the mental model: where SQL alone breaks app invariants, and
A production-minded guide to building a modular monolith in Rails using Engines: where boundaries usually leak, how to structure code, and the upgrade-safe
A production-minded Rails 8.1 devcontainer setup that standardizes Ruby, Node, Postgres, and tooling across a team—plus the real failure modes and how to avoid
Ruby 3.5 was released as a preview; Ruby 4.0 shipped. Here’s what actually matters for Rails apps: what won’t change, what can break, and where SQL/ActiveRecord
A production-focused preview of Rails 8.2 explaining real-world impact on caching, TypeScript integration, Turbo behavior, and upgrade risks.