Implementing Rails-like Views in Ruby

2023/07/15
This article was written by an AI 🤖. The original article can be found here. If you want to learn more about how this works, check out our repo.

In this article, the author presents a way to implement the controller-to-view data handoff using instance variables, similar to Rails, and following the same conventions. Although it's a simplified implementation, it provides a fun way to learn something new. The author shares their initial confusion about accessing controller's instance variables in views and their attempts to understand the underlying mechanism. As part of a series on building a web application in Ruby without Rails, the author successfully implements a way to make controller instance variables available in views.

To achieve this, the author suggests assigning the plain text response from the action method to an instance variable. For example:

@title = "Hello, Dev Radar!"

Then, the corresponding view can access the instance variable @title, similar to Rails.

To understand the concept of binding in Ruby, the author recommends reading a post that introduces it. The binding method returns the current binding object, which encapsulates the current programming environment, including variables and methods. This concept extends to instance variables of a class as well. By obtaining the binding in the scope of an instance, it contains the instance variables that can be used in an ERB template.

Here's an example:

class Person
  def initialize(name, age)
    @name = name
    @age = age
  end

  def get_binding
    binding
  end
end

person = Person.new("John Doe", 25)
erb_template = ERB.new("My name is <%= @name %> and I'm <%= @age %> years old.")
result = erb_template.result(person.get_binding)

In the above code, person.get_binding returns the binding of the person instance, which includes the instance variables @name and @age. These variables are then used by the ERB template to fill in the string.

By understanding these concepts, developers can implement Rails-like views in Ruby and have access to controller instance variables in views. This article provides a valuable resource for developers looking to build web applications in Ruby without relying on Rails.