Prices shown are a USD base. Your local-market price is calculated at checkout in your own currency, plus any local sales tax.
What is inside
20 chapters, in the order the interviews tend to ask them:
Object orientation, mixins and the ancestor chain
Blocks, procs and lambdas
Symbols, strings and identity
Metaprogramming and dynamic dispatch
Exceptions, error handling and failure boundaries
Gems, Bundler and dependency management
The Rails request lifecycle
Routing and resource design
Controllers, actions and strong parameters
Active Record and the query interface
Associations, lazy loading and N plus one
Migrations and schema design
Validations and callbacks
Security in a Rails application
The asset pipeline and frontend integration
Background jobs with Active Job
Action Cable and realtime features
Testing with RSpec and Minitest
Performance and eliminating N plus one
Caching and session strategies
How the answers are built
Each chapter opens with the checklist the question is really testing. A few from this pack:
A class can be instantiated and a module cannot, but both carry methods, constants and nested definitions, and both expose an ancestors array.
A block is an anonymous function written at the call site, and it becomes a Proc object the moment you capture it into a variable or take it as a parameter.
A symbol is a name, and the runtime keeps one interned object per name, so two occurrences of :name are the same object.
method_missing is called only after normal lookup has failed, so anything that dispatches by name has to implement respond_to_missing? as well or the object lies about its own interface.
StandardError is the parent of the errors ordinary application code raises, and Exception is the parent of the ones that mean the process is being asked to stop.
The Gemfile declares intent with loose constraints, and Gemfile.lock records the exact resolution the application was tested against.
Questions this pack covers
What actually separates a class from a module in Ruby?
How does the ancestors method expose the order Ruby searches for a method?
What is the actual difference between a block and a proc?
Why does a lambda check its arity when a proc does not?
Why is a symbol not simply a string that happens to look different?
What actually makes a symbol cheap to use as a hash key?
How does method_missing get invoked at all?
What do define_method and send buy over plain syntax?
Each one is answered in full in the pack, with the reasoning written out rather than a bullet list.