Conceptual image depicting the avoidance of Rails Observers in Ruby on Rails development. Features a prominent red ‘No’ symbol over the Rails Observers icon, set against a backdrop highlighting alternative methods like Active Model callbacks. Emphasizes a shift towards more efficient, modern development techniques in Rails.
Choosing Modern Techniques Over Rails Observers: A Ruby on Rails Development Strategy

Avoiding Rails Observers: Better Alternatives

Alessio Bussolari
3 min readNov 21, 2023

--

In the realm of Ruby on Rails development, certain practices and patterns that were once widely used have fallen out of favor due to their limitations and potential for making code less maintainable. One such practice is the use of Rails observers. In this article, we’ll discuss why Rails observers are discouraged and explore alternative, more modern approaches for handling model callbacks.

What Are Rails Observers?

Rails observers are a way to add behavior to model classes based on changes in their state. They allow you to “observe” specific events in a model’s lifecycle, such as before_save or after_create, and execute custom code in response to those events. While they might sound useful in theory, they have several drawbacks that have led the Rails community to discourage their use.

Lack of Clarity

Rails observers can make code less clear and more challenging to understand. When callbacks are defined within observers, it’s not immediately evident where and when those callbacks will be triggered. This lack of clarity can lead to confusion for developers trying to understand the flow of the application.

Hidden Dependencies

Observers introduce hidden dependencies between models and their observers. When an observer is defined for a model, it’s not explicit in the model itself that it has associated observers. This can make it difficult to trace and manage relationships between components of your application.

Difficulty in Testing

Testing code that relies heavily on observers can be complex. Observers can make it challenging to write isolated unit tests for models, as you may need to set up and trigger observers in your test cases. This can slow down the testing process and make it less reliable.

Limited Flexibility

Observers are limited in terms of flexibility. They don’t provide a way to easily conditionally skip callbacks or modify their behavior dynamically, which is often necessary in complex applications.

Deprecated in Rails 5

--

--

Alessio Bussolari

Ruby on Rails programmer since 2009. Current CTO at COSMIC SRL, where I lead the team in creating innovative solutions.