Important Work on this lesson in builder mode. Jasmine is a purely client-side tool. It cannot ask Rails to render a view or access the database. Any HTTP...
You can explain what JavaScript unit tests cover that end-to-end tests shouldn't: a component's details and edge cases, without a server or a database.
...locale files. This lesson covers how to use it, why it is useful even for single-language apps, and how to test it. Important Work on this lesson in builder...
...organized in locale files. You can explain why locale files pay off even in a single-language app: model and attribute names, formats and error messages live in one place...
Many applications let users upload files. This lesson covers storing uploads as model attributes with CarrierWave, generating image versions, and testing uploads. Important Work on this lesson in advisor mode...
You can explain how an uploaded file travels from the browser to the server (a multipart form post) and where a Rails app can store it.
Our workstations and servers run Linux. This lesson covers the command-line tools you need every day, from file and process handling to SSH and shell scripts. Important
...this lesson in advisor mode. Learning goals You can look around a Linux system from the shell: files and directories, running processes, disk usage, open network ports, installed packages.
...application remembers a user between requests. This lesson covers how cookies work, how Rails sessions build on them, and what signed, encrypted and SameSite cookies protect against. Important
...would change if we stored it in the database instead β and what would break for signed-out visitors...
...of different file types including: Ruby (business logic) HTML fragments (layouts and views) CSS/Sass/SCSS (styles) JavaScript (client-side behavior) Static media (images, fonts, videos) Except for the Ruby part, all...
...to make your application assets cachable in Rails β our card; fingerprinting and cache headers π JavaScript start-up optimization: network β why bundle size and count matter π yarn 1 documentation β the package...
...can explain why we create test data with factories instead of fixtures: each test starts empty and creates only what it needs. You can define factories with sensible defaults, using...
...gems like FactoryBot, and use them in specs with overrides. You can define factories for associated records, and avoid creating duplicates where a record should be reused.
...programming language we use on the backend. This lesson takes you from your first script to classes, blocks and custom errors β the working vocabulary for everything that follows. Important
...on this lesson in teacher mode. Learning goals You can write and run a small Ruby program that reads input (e.g. arguments or a file) and prints output.
...where they happened. Understanding this lets you handle events for many elements with a single listener, including elements that don't exist yet. Important Work on this lesson in advisor...
...how a DOM event travels through the tree β capturing, target, bubbling β and which listeners see it in which order. You can explain the difference between event.target and event.currentTarget.
Migrations change your database schema in a controlled, repeatable way. This lesson covers how migrations work, how to write complex ones, and how to deal with existing data. Important
...in advisor mode. Learning goals You can explain what migrations are for, and why schema changes go through migrations instead of manual changes on a server. You can write migrations...
Beyond commit, push and pull, Git lets you rewrite history, split and squash commits, and recover from mistakes. This lesson covers the tools we use daily to keep feature branches...
...split; the canonical text π Rewriting history β Atlassian's tutorial, with git rebase and git reflog sub-pages βΆοΈ Master Git Interactive Rebase β Rissa Jackson, Laracon 2025; live terminal demos of dropping...
...function can be a new instance method of all arrays (by patching Array.prototype) or a stand-alone function that takes an array argument. Write a JavaScript function mySelect that works...
...function can be a new instance method of all arrays (by patching Array.prototype) or a stand-alone function that takes an array argument. Did you learn how this works?
...This lesson covers metaprogramming techniques and how to use them to build a domain-specific language (DSL), along with the price you pay in readability. Important Work on this lesson...
...exec) and explain why DSLs depend on this. You can explain what a domain-specific language is, and weigh its benefit β data that reads like prose β against its costs: code...
...proven library instead of a homegrown solution, and what "homegrown crypto" risks. You can add sign-up, login and logout to a Rails app with our default library (Clearance), adapt...
...its views to the app, and deny access to signed-out users by default rather than per controller. You can attach records to the signed-in user and test the...
Important Work on this lesson in advisor mode. Learning goals You can explain how server-side validation of single fields works while the user is still filling out the...
...an explanation for anything here, tailored to what you already know. Just ask. π Validating forms β server-side validation of single fields while the user types π Switching form state β showing and...
Authorization decides what a signed-in user is allowed to do. This lesson covers modeling roles and permissions with Consul and assignable_values. Important Work on this lesson in advisor...
You can explain what authorization is, how it differs from authentication, and the shapes it usually takes: roles, ownership, per-record permissions. You can define what each role may...
Git is our version control system. This lesson covers the everyday moves β committing, branching, merging, working with a remote β and the habits that make your history pleasant to review.
...in teacher mode. Learning goals You can explain where a change lives at each stage β working copy, staging area, local repository, remote β and how it moves between them.
...This lesson covers Rails' built-in validations, how to test them, and how to show helpful error messages in your forms. Important Work on this lesson in teacher mode.
π Testing ActiveRecord validations with RSpec β one spec per rule, with plain RSpec or shoulda-matchers π shoulda-matchers β setup (MovieDB doesn't ship it, add the gem) and the...
...it. This lesson covers how we get notified about exceptions and how tools like Sentry keep the noise down. Important Work on this lesson in advisor mode. Learning goals
...can explain why an application must report its errors somewhere, and what happens to an exception in production when nobody is notified. You can explain how our teams handle incoming...
Rendering thousands of records on one page is slow. Pagination loads one page at a time and keeps large lists fast. Important Work on this lesson in advisor mode.
You can explain why rendering a large collection on one page is slow β queries, object instantiation, rendering β and how pagination avoids it. You can add pagination to a list...
...explain how Ruby looks up a method: the ancestor chain of a class, including singleton classes, and where include, extend and prepend insert a module into it. You can explain...
...with a module is the same as including the module into the object's singleton class. You can find where a method is defined even when metaprogramming defined it, e.g...
Some uploaded files must only be accessible to authorized users. This lesson covers storing attachments securely and preventing users from uploading malicious content. Important Work on this lesson in builder...
...authorization check π Preventing users from uploading malicious content β our card: validate extension and content type π Self-expiring URLs with Apache β for context, the web-server-side alternative; you don't...
Regular expressions extract structured data from text. This lesson teaches you to write, read and test them, and shows where they are the right tool and where they aren't...
...You can keep a complex pattern readable, e.g. with the /x flag, comments or nested sub-patterns. You can test a pattern interactively, and you know that line breaks and...
...real time, and why an estimate is a range with assumptions rather than a single number. You can explain which factors we add on top of pure development time β e.g...
...its trade-offs visible in the estimate. Resources Read what's new to you, skim what's familiar, skip what you already master. Stop when you can meet the learning...