Write Software Well
A blog about software development done right, with a special focus on Ruby on Rails.
- Posts
- 208 from 21 Aug 2021 to 13 Oct 2026
- Posting
- monthly (7 in the last year)
- Kind
- personal blog
- Feed
- https://writesoftwarewell.com/feed/
2026 5
2025 27
- You Can Now Access Bearer Tokens Directly from Request
- Combined Credentials in Rails 8.2
- Active Storage Internals: How has_one_attached DSL Works
- Active Storage Domain Model: Blobs and Attachments
- Rails on Localhost: Secure Context and Local HTTPS with Caddy
- Sitemaps: A Quick SEO Win for New Websites
- Polymorphic URLs with direct Router Helper
- Working Effectively with AI as a Developer
- How to Inspect the Sequence of Controller Callbacks in Rails
- Thoughts on Freelancing for Web Developers
- Redirects in Rails: Manual, Helper, and Internals
- Understanding the Render Method in Rails
- Vibe Learning is Underrated
- Serving Large Files in Rails with a Reverse Proxy Server
- Fix N+1 Queries Without Eager Loading Using SQL Subqueries
- Reduce Memory Usage by Selecting Specific Columns Apr 6, 2025
- Profiling Ruby on Rails Applications with Rails Debugbar Apr 2, 2025
- Why You Need Strong Parameters in Rails Mar 19, 2025
- Working with HTTP Responses in Rails Mar 10, 2025
- Working with HTTP Requests in Rails Mar 7, 2025
- Understanding Rails Parameters Mar 5, 2025
- New Series on Rails Controllers Mar 3, 2025
- Restrict Destroying Dependent Rails Associations with Error Feb 19, 2025
- Backup SQLite from a Containerized Rails App Deployed with Kamal Feb 17, 2025
- Working with the Rails Instrumentation API Feb 8, 2025
- How a Ruby Method Becomes a Rails Action: Part One Jan 4, 2025
- Using Hotwire for Inline Form Updates Without Form Submission Nov 12, 2024
2024 49
- A Brief Introduction to Rails Initializers: Why, What, and How Oct 19, 2024
- Not-Null Shortcut in Rails 8 Migration Generator Oct 7, 2024
- If You're a WordPress Developer, Learn Ruby and Rails Sep 26, 2024
- How to Count the Number of Commits After a Specific Commit in Git Aug 25, 2024
- The Rails Router Handbook Aug 8, 2024
- Routing Concerns in Rails Aug 7, 2024
- Understanding Shallow Nested Routes in Rails Aug 6, 2024
- Working with Resourceful Routes in Ruby on Rails Aug 2, 2024
- Map a Resourceful Route in Rails to Another Controller Class Jul 29, 2024
- How to Route an Incoming URL to a Rack Application in Rails Jul 29, 2024
- Working with Nested Resources in Ruby on Rails Jul 22, 2024
- How to List and Filter Routes in Ruby on Rails Jul 18, 2024
- Understanding the Match Method in Rails Router Jul 15, 2024
- How to Override the Named Route Parameter ID in Rails Jul 12, 2024
- Understanding Named Routes in Rails Jul 10, 2024
- How to Add a root Route in Rails Jul 9, 2024
- How to Redirect Incoming HTTP Requests Using Rails Router Jul 2, 2024
- How to Access Raw POST Data in Rails Jun 26, 2024
- Rails Router: Dynamic Segments and Query Strings Jun 22, 2024
- Polymorphic Associations in Rails: Why, What, and How Jun 16, 2024
- A Brief Overview of the Rails Routing Config File Jun 14, 2024
- Introduction to the Routing System in Rails Jun 9, 2024
- My Notes from Shape Up: Shipping Work that Matters Jun 2, 2024
- How to Setup Rails-like Integration Tests in Ruby May 26, 2024
- How to Access Rails Models in a Rake Task May 19, 2024
- I am Available as a Freelance Developer Apr 24, 2024
- From a Lorry Driver to Ruby on Rails Developer at 38 Apr 19, 2024
- How I Read Rails Source Code Apr 12, 2024
- Build Your Own Router in Ruby Mar 31, 2024
- Growing Object-Oriented Software, Guided by Tests Mar 24, 2024
- Understanding Ruby's defined? Keyword Mar 14, 2024
- Honeybadger Now Supports Logging and Event Monitoring Mar 5, 2024
- Let's Build a Web Application in Ruby without Rails Mar 4, 2024
- What Does the Frozen String Literal Comment Do in Ruby? Mar 1, 2024
- Speed Up Your Tests Using VCR Gem in Ruby Feb 23, 2024
- Playing Sounds in Rails with the Audio API Feb 21, 2024
- How to Generate Random Numbers in Ruby Feb 19, 2024
- Anonymous Block Forwarding in Ruby Feb 14, 2024
- Custom URL Helpers in Rails with the direct Method Feb 11, 2024
- Understanding the Rails Router: Why, What, and How Feb 5, 2024
- What is __FILE__ in Ruby? Feb 3, 2024
- Prevent Logging Sensitive Data with Rails Parameter Filters Feb 1, 2024
- Understanding How Rails Environments Work Jan 24, 2024
- Learn to Program Ruby with Me Jan 19, 2024
- How to Process a Turbo Stream Response in JavaScript using Stimulus Jan 15, 2024
- The Rails Config File Jan 11, 2024
- See Other After Destroy Jan 1, 2024
- How to Remove Whitespace from a String in Ruby Jan 1, 2024
- Annual Blog Review: 2023 Dec 27, 2023
2023 76
- Enqueue Multiple Jobs Together with perform_all_later in Rails Dec 23, 2023
- Nested Modules in Ruby Dec 21, 2023
- How to Read a File in Ruby Dec 19, 2023
- Rails Internals: A Deep Dive Into Active Job Codebase Dec 15, 2023
- Working with SQLite in Ruby Dec 11, 2023
- How respond-to Method Works in Rails Dec 7, 2023
- CDPATH: Easily Navigate Directories in the Terminal Dec 5, 2023
- How to Customize Rails Validation Errors to Remove Leading Attribute Column Names Nov 15, 2023
- How to Return 404 Not Found Error in Rails Nov 13, 2023
- Interview with Daniela Baron, Staff Engineer at FundThrough Nov 9, 2023
- Akshay's Blog is now Write Software, Well Oct 27, 2023
- Base64 Encoding, Explained Oct 23, 2023
- Length, Size, and Count in Ruby and Rails: When to Use Which? Oct 14, 2023
- Interview with Miles Woodroffe, former Global CTO of Cookpad Oct 10, 2023
- The Difference Between nil?, empty?, and blank? in Ruby Oct 7, 2023
- Refactoring: Improving the Design of Existing Code (My Notes and Highlights) Oct 5, 2023
- What Happens When You Run Rails dev:cache Command? Sep 30, 2023
- How to Access a Ruby Hash with both String and Symbol Keys Sep 27, 2023
- How to Debug and Step-Through Rails Codebase Sep 16, 2023
- The Complete Guide to Working With Cookies in Rails Sep 14, 2023
- Rails Middleware: (Almost) Everything You Need to Know Sep 9, 2023
- Let's Read the Turbo Source: What Happens When You Click a Link? Sep 6, 2023
- Let's Implement the Map Method from First Principles Sep 3, 2023
- Rails Database Migrations Cheatsheet Aug 31, 2023
- Practical Stimulus: Building a Counter Component Aug 23, 2023
- Ruby's Hash is a Swiss-Army Knife Aug 20, 2023
- Abbrev: A Hidden Ruby Gem Aug 16, 2023
- Using Zeitwerk Outside Rails Aug 12, 2023
- How to Implement Content Security Policy in Rails Aug 9, 2023
- You Don't Need Rails to Start Using Hotwire Aug 6, 2023
- Content Security Policy (CSP): What Every Web Developer Must Know Aug 3, 2023
- Serving Static Files in Ruby Jul 30, 2023
- Logging in Ruby: (Almost) Everything You Need to Know Jul 30, 2023
- How to Dynamically Create Instance Variables in Ruby Jul 25, 2023
- How to Render SVG Icons in Ruby on Rails Jul 19, 2023
- How to Implement Rails-like Dynamic Views in Ruby Jul 15, 2023
- Implementing Rails-like Controllers in a No-Rails App Jul 11, 2023
- Understanding the Concept of Binding in Ruby Jul 8, 2023
- How to Split a List into N Equal Parts in Ruby (and Rails) Jun 24, 2023
- Blocks, Procs, and Lambdas: A Beginner's Guide to Closures and Anonymous Functions in Ruby Jun 17, 2023
- Practical Stimulus: Capture User Input Jun 17, 2023
- How Module Autoloading Works in Ruby and Rails Jun 14, 2023
- Practical Stimulus: How to Toggle CSS Classes Jun 11, 2023
- How to Create a Form with Multiple Submit Buttons to Different URL Endpoints Jun 3, 2023
- Generating Secure Tokens on Your ActiveRecord Models May 31, 2023
- How to Render Markdown Views in Rails May 25, 2023
- Concerns in Rails: Everything You Need to Know May 20, 2023
- How to Create Custom Flash Types in Rails May 17, 2023
- Inline Routes in Rails May 15, 2023
- Simplifying My Blogging Workflow with Ruby May 13, 2023
- Did You Know that You Can Catch and Throw Stuff in Ruby? May 9, 2023
- Various Ways to Run Shell Commands in Ruby Apr 29, 2023
- Ruby's Switch Statement is More Flexible Than You Thought Apr 25, 2023
- Can You Spot the Error? Apr 23, 2023
- A List of Books to Learn Programming with Ruby and Rails Apr 20, 2023
- How to Access Hash Values with Methods Using OrderedOptions Apr 15, 2023
- The Definitive Guide to Rack for Rails Developers Apr 9, 2023
- Readonly Attributes in Rails Apr 4, 2023
- Sessions in Rails: Everything You Need to Know Mar 29, 2023
- Understanding the Attribute Assignment API in Rails Mar 23, 2023
- Progressive Application Development with Hotwire Mar 20, 2023
- Configuring Rails Environments Mar 4, 2023
- Turbo Streams: How They Work and Differ From Turbo Frames Feb 28, 2023
- A Brief Introduction to Hotwire Feb 18, 2023
- How Rails Authenticity Tokens Protect Against CSRF Vulnerability Feb 17, 2023
- Cross-Site Request Forgery (CSRF) Attack: What It Is, How It Works, and How to Prevent It Feb 12, 2023
- Docked Rails: Setup a Ruby on Rails Application on Docker 🐳 Feb 7, 2023
- The Difference Between load, autoload, require, and require_relative in Ruby 📖 Jan 28, 2023
- Open GitHub Repositories in VS Code In-Browser Jan 22, 2023
- Method Shorthand in Ruby Jan 19, 2023
- How to Explicitly Render a Different View in Rails Jan 19, 2023
- class_eval vs. instance_eval in Ruby Jan 15, 2023
- Array Inquiry in Rails Jan 8, 2023
- How to Check If Value Exists in an Array in Ruby (and Rails) Jan 5, 2023
- Tracking TODO and FIXME Comments with Rails Notes Command Jan 3, 2023
- What Happens When You Call render? Let's Understand the Rails Rendering Process Dec 29, 2022
2022 38
- Regular Expressions in Ruby Dec 26, 2022
- Let's Learn Ruby on Rails + Hotwire by Building a To-Do List Dec 11, 2022
- How to Undo Generate Scaffold Command in Rails Nov 13, 2022
- How self Keyword Works in Ruby Nov 4, 2022
- Setting Up Development Environment for Rails Oct 18, 2022
- Define Custom Routes Using the Member and Collection Blocks in Rails Oct 15, 2022
- How &:method Shortcut Works in Ruby Oct 13, 2022
- Building Web Applications with Ruby on Rails Oct 11, 2022
- Understanding Blocks and the Difference in Proc and Lambda Oct 7, 2022
- Compare Strings Using Inquiry Sep 30, 2022
- How to Compress a String in Ruby (and Rails) Sep 28, 2022
- Configure Classes Using the Configurable Concern in Rails Sep 27, 2022
- How to Access Variables Outside Scopes in Ruby Sep 23, 2022
- Ruby is a Meritocracy Sep 22, 2022
- How to Benchmark Rails Views Sep 21, 2022
- How to Benchmark Ruby Code Sep 16, 2022
- Understanding Authenticity Tokens in Rails Sep 13, 2022
- Metaprogramming in Ruby Sep 12, 2022
- How to Get an Object's Class Name in Rails Sep 11, 2022
- A Deep Dive Into Database Migrations in Rails Sep 9, 2022
- Attributes API in Rails Sep 8, 2022
- How to Get the Current Absolute URL in Rails Sep 7, 2022
- How to Rename a Database Column in Rails Sep 6, 2022
- Metal Controller in Rails Aug 16, 2022
- Active Job: How does it work? Aug 12, 2022
- Up and Running with Minitest Jun 29, 2022
- Ruby Shortcut to Call a Method with Each Array Item as Parameter Jun 10, 2022
- How to Manage Environment Variables in Rails Jun 2, 2022
- Useful Linux Commands May 12, 2022
- How to Convert a Ruby Object to Hash May 1, 2022
- Useful Ruby Gems Apr 25, 2022
- How to Access Route Helpers from Rails Console and Models Apr 19, 2022
- Why Turbo Uses Event Capturing Apr 11, 2022
- Why Choose `let` Over instance variables in RSpec Mar 25, 2022
- Inline Edits using Turbo Frames Feb 25, 2022
- Turbo Drive Essentials Feb 11, 2022
- Launching Multiple Processes with a Single Command in Rails Jan 30, 2022
- How to Setup Tailwind 3 on Rails Dec 13, 2021
2021 11
- Couldn't Find Handler For: puma, thin, falcon, webrick Dec 9, 2021
- All the Database Tasks in Rails Dec 8, 2021
- How to Drop a Table in Rails Dec 7, 2021
- How to Test Rails Source Code Nov 28, 2021
- Include and Extend Sep 25, 2021
- Modifying Objects in Place Sep 22, 2021
- Class Metaprogramming in Ruby Sep 21, 2021
- How to Implement Callbacks in Ruby Sep 20, 2021
- A List of Middleware Used by Rails Sep 15, 2021
- Caching in Rails Aug 21, 2021
- A Brief Introduction to Rake Aug 16, 2021