Save 36% for Black Friday! Save 36% on GoRails for Black Friday! Learn more →
How to build a complete, real-world application from scratch with Ruby on Rails step by step.
A lot of Ruby code is "magic". We'll explain the magic and see how it works using the powerful tools Ruby gives us.
Accept subscription and one-time payments with Stripe in your Rails apps
Expert advice on keeping Rails apps organized and fast.
Learn how to build fast, modern web apps with HTML over the wire.
Setup your computer with Ruby on Rails and deploy to a production server.
Cheap, easy hosting for Ruby and Rails apps.
Launch your product business way faster with our SaaS template.
A weekly podcast on web development and building products with Ruby, Rails, Javascript, and more.
A few of the Open Source projects we do at GoRails.
Build a Ruby on Rails app in 48 hours with us.
Help Junior developers get hired by sharing small projects to build their resume with paid work.
Find your next Ruby on Rails Job.
Learn how to write your own test helpers to build assertions. In this lesson, we're adding some test helpers to the turbo-rails gem to assert that turbo-frame tags in the response.
The Rails Authentication generator is getting new test helpers. We'll take a look at how to use them with integration tests and how to extend them to work with system tests too.
Rails now ships the Trix editor as a separate gem (action_text-trix) instead of being included in ActionText. This allows for separate releases independently of Rails.
Enumerable provides a suite of sorting, filtering, iterating functionality to any collection class in Ruby. It's easy to implement and use, so let's see how to use it.
In this lesson, we will look at an extremely simple way to implement keeping track of and displaying the online/logged in status of users in our chat application.
Showing users that they have unread messages is nice but it would be nicer if we scrolled them to the start of those unread messages when they visit a conversation which is what we will implement in this lesson.
Let's add the ability to edit the contents of our messages and broadcast page refreshes so that everyone can see the latest version of our messages.
To provide clean integrations with Rails plugins, we can use lazy load hooks to add callbacks for when classes are loaded.
Continuing on in our chat app with Hotwire, we are going to be implementing the ability to indicate to users that they have unread messages in conversations.
Let's look at how to apply CSS to the current user only to create a better UX for reading messages without using any JavaScript
We spend most of our time working with Ruby gems and node modules, but on the rare occasion, we might need to debug an Ubuntu / Debian package. In this lesson, we'll see how these packages work and debug something in the PostgreSQL package.
Learn how to use the CodeMirror editor in your browser using Importmaps.
In this lesson, we dive into the Pagy source code to learn how to best refactor pagination inside of our own code.
In this episode, we refactor our code to use broadcasts_refreshes to get an extremely simplified version of a chat application.
We handle scrolling the most recent message into view upon page load along with any new messages that come through while on the page. We also broadcast new messages so everyone stays up to date.
We take care of submitting a message without having to click the form button, and fix an issue we create in doing so around replacing the form. We end with planning our next steps.
We explore the base application and create a turbo stream to append messages and reset the form. We then identify limitations in this approach, and outline necessary improvements for upcoming episodes.
Like many AI models, Gemini 2.0 can respond with structured output in a JSON schema that you provide in your request. This is incredibly handy for making integrations that don't have to rely on parsing a blob of text.
AI summaries are in every application these days. In this lesson, we'll use Google's new Gemini 2.0 AI model and API to generate summaries of text that we can use in any Ruby or Rails app.
Normally, we require dependencies at the top of files, but today we'll see where and when we might want to lazily require dependencies.