GoRails
Course Description
Learn Rails and quickly take your next product from idea to production. Build a full-stack app from scratch while exploring MVC, routing, authentication, background jobs, and real-time updates with Hotwire. Learn a token-efficient framework that's easy for agents to write and for humans to review.
Prerequisite: Basic programming experience in any language and comfort with the command line.
Preview
Course Details
Published: August 6, 2026
Learn Straight from the Experts Who Shape the Modern Web
Your Path to Senior Developer and Beyond
- 300+ In-depth courses
- 24 Learning Paths
- Industry Leading Experts
- Live Interactive Workshops
Table of Contents
Introduction
Section Duration: 7 minutes
Chris Oliver introduces the course by sharing his background in Ruby and Rails, explaining what makes the framework uniquely powerful, and making the case for why Rails remains relevant today. He highlights the big companies still betting on it and covers its surprising advantages in the age of AI coding.
Chris walks through the full environment setup, covering how to install Ruby using Mise, get Rails up and running, and create a new Rails app. He also previews the job board project the course will build, including job postings with rich text, email subscriptions, and weekly background jobs, before starting to map out the database schema.
MVC Basics
Section Duration: 28 minutes
Chris demonstrates how to create a database table for jobs in Rails, specifying attributes like title, company, salary, region, apply URL, and apply email. He explains the automatic generation of Ruby code by Rails based on the defined database table, highlighting the convenience of inheriting from application record to handle tedious tasks.
Chris explains how to use presence validations in Rails to ensure certain attributes are not left blank, demonstrating how to customize validations for attributes like apply URL and apply email based on specific conditions. He then guides students through creating a custom validation method to provide a more user-friendly error message when either of these attributes is missing, enhancing the validation process for a better user experience.
Chris demonstrates how to write a test in Rails to validate the presence of an apply URL or email, creating different scenarios to test for valid and invalid cases. He then guides students through running the test suite to ensure the custom validations are working correctly, emphasizing the importance of testing edge cases thoroughly.
CRUD
Section Duration: 1 hour, 16 minutes
Chris walks through setting up routes in a Rails application, explaining how to define URLs in the routes.rb file and utilize the resources helper to generate multiple routes efficiently. He then demonstrates creating a controller, explaining the purpose of instance variables and how to share data with views to display content from the database.
Chris demonstrates how to use the render function to display jobs from a database by creating reusable HTML snippets called partials, passing local variables, and avoiding the use of instance variables. He then guides students through making the job titles clickable links using the link_to helper, dynamically generating URLs based on the active record object's ID, and enhancing the display with additional context like salary and region.
Chris explains how to define a show action in the controller and create an HTML view for it, following the error messages provided by Rails. He then demonstrates how to query the database using params from the URL to display specific job details on the show page, utilizing instance variables for data persistence.
Chris explains how to set up a form in Rails to create, edit, and delete job listings, emphasizing the importance of correctly configuring the new action in the controller to instantiate a job object. He then guides students through using the form_with helper to generate form fields for attributes like title, company, salary, region, apply URL, and apply email, showcasing how Rails simplifies URL submission logic for new and existing records.
Chris explains the concept of strong parameters in Rails, demonstrating how to create a method to filter and allow specific attributes for form submissions, enhancing security by preventing unauthorized data manipulation. He then guides students through handling form submission errors by rendering a reusable partial to display error messages, ensuring a user-friendly experience and reinforcing best practices in error handling.
Chris walks through updating the job post show action by adding a link to edit the job post and explains how to display links conditionally based on the presence of apply URLs or emails. He then demonstrates implementing a secure URL validation method using uri.parse to prevent malicious input, ensuring the link is safe and discussing the importance of sanitizing output for security.
Action Text & Authentication
Section Duration: 1 hour, 12 minutes
Chris explains how to use Action Text in Rails to handle rich text content, including collecting HTML from users, saving it in the database, and re-rendering it. He also covers Active Storage, demonstrating how to upload images, resize them, and associate them with content, showcasing the flexibility and convenience of these features in Rails development.
Chris demonstrates how to set up user authentication in a Rails application, including creating a user model, sessions model, and handling password hashing using bcrypt. He explains the associations between users and jobs, ensuring that only registered users can post, edit, or delete job listings, and guides through setting up optional associations to maintain job validity even if a user account is deleted.
Chris explains the concept of authentication in Rails, demonstrating how the 'authenticated' method from the authentication module ensures users are logged in across controllers and views. He also compares the built-in Rails authentication with the Devise gem, highlighting the convenience and security features of Devise for handling registration, login, and other authentication flows.
Chris walks through the process of setting up user registration in a Rails application, explaining the importance of specifying singular resources and limiting unnecessary actions in routes. He demonstrates creating a registrations controller, handling user input validation, and ensuring a smooth user experience by rendering error messages when needed.
Chris explains how to associate job posts with logged-in users securely by merging the user ID into the attributes. He demonstrates using the current user's association to ensure users can only access and modify their own job posts, emphasizing the importance of testing to maintain data security.
Chris demonstrates how to maintain data integrity by handling scenarios where user accounts are deleted in a Rails application, ensuring that associated job posts remain valid and unlinked. He then explores implementing user authentication logic to control access to specific job posts based on ownership, utilizing a method in the job model to determine if the current user is the owner of a particular job.
Emails & Background Jobs
Section Duration: 1 hour, 1 minute
Chris explains the process of setting up email subscriptions for a job board, starting with creating a subscriber database model with just an email address field. He then demonstrates how to integrate a subscriber form into different views using partials and explains the logic behind using a 'first or create' database query to handle subscriber creation efficiently.
Chris demonstrates how to use turbo frames in Rails to create a seamless inline user experience without redirecting or changing URLs. He shows how turbo frames work like iframes, allowing for reusable parts of the application to be updated dynamically without the need for extensive JavaScript coding.
Chris demonstrates how to create a subscriber mailer in Rails, including setting up templates for text and HTML emails, defining the email subject in locales, and generating email views. He then guides students through testing the mailer using a preview file, ensuring correct email addresses are passed in, and verifying links work in both HTML and plain text versions.
Chris explains how to generate unique tokens for unsubscribing purposes in Rails, ensuring the links are secure and valid by encoding subscriber information and matching purposes. He then demonstrates setting up an interstitial page to confirm unsubscribing, preventing automatic unsubscriptions by email clients like Outlook and Gmail.
Chris introduces Solid Queue, Rails 8's built-in background job processor, and explains how it works as a separate process. He sets up a recurring cron job to run every Friday at 8 AM, builds the send_weekly_summary class method on the Subscriber model, and walks through why queuing individual email jobs per subscriber is better than sending them all at once.
Chris writes tests for the weekly summary job using Rails fixtures and Active Job test helpers, catches and fixes a bug with passing Active Record relations as job arguments, and refactors the jobs query into a named scope. He also covers how Solid Queue starts alongside the Rails server in production, and wraps up with a Q&A on email providers and DNS configuration.
Hotwire & Deployment
Section Duration: 1 hour, 3 minutes
Chris explores the integration of Hotwire, specifically Turbo, in Rails applications to enable real-time updates in the UI without writing additional JavaScript code. He breaks down how Turbo intercepts links and forms to fetch new content, optimizing UI changes by morphing elements to minimize disruptions.
Chris explores the functionality of Turbo, focusing on Turbo Drive, Turbo Streams, and Turbo Frames, explaining how they handle link clicks, form submissions, and dynamic updates to web pages without the need for extensive JavaScript coding. He demonstrates how Turbo morphing allows for efficient updates to specific elements on a page, showcasing its ability to streamline UI updates and leverage backend caching effectively.
Chris demonstrates how to set up turbo streams in Rails, showing how to create a turbo stream tag and establish a connection using web sockets for real-time updates on the UI. He then walks through broadcasting HTML elements to the front end upon job creation, update, or deletion, automatically triggering UI updates without manual intervention.
Chris explores the importance of placing turbo streams inside partials to ensure new elements are subscribed to changes and avoid multiple streams being inserted. He demonstrates how to use TurboStreams for flash messages or custom notifications, highlighting the creative possibilities for enhancing user experience.
Chris demonstrates how to set up a server on Hetzner, configure Kamal for Rails deployment, and utilize Docker for image building and deployment. He explains the process of deploying changes, managing secrets in Rails credentials, and optimizing Docker images for production.
Chris demonstrates how to quickly integrate the mission control jobs gem into the Rails project by adding it to the gemfile, running bundle install, and configuring it to monitor background jobs in production. He then explains the importance of error monitoring services like AppSignal or Honey Badger to track and handle errors effectively, alongside setting up email services for job functionalities to work seamlessly.
Wrapping Up
Section Duration: 6 minutes
Chris wraps up the course by answering student questions on alternative front-end frameworks like Inertia Rails, Kamal deployment configuration, Docker image builds, and a few final production considerations around SSL certificates and SQLite persistence.
Earn a Completion Certificate
After completing this course, you'll receive a certificate of completion that serves as proof of your achievement, showcasing your expertise, and commitment to professional development. You can easily share this certificate on your LinkedIn profile to highlight your new skills and demonstrate continuous learning to potential employers and professional connections.
