Step 1: Add a Render Method on Controller
Let's require the erb gem and add a new method called render on the ApplicationController class. We're adding it to the base controller class so that all controller classes will inherit it.
require 'erb'
class ApplicationController
attr_reader :env
def initialize(env)
@env = env
end
# new method
def render(view_template)
erb_template = ERB.new File.read(view_template)
erb_template.result(binding)
end
end
The new code does the same thing that we saw in our simplified example earlier. However, there're three important things to note here:
- It reads the string template from a file called
view_template, which we'll learn more about later. - Then it calls the
bindingmethod to get the binding in the context of the controller class, making all the instance variables available to the binding. - Finally, it renders the response by calling the
resultmethod on the ERB template and passing the binding.
If this sounds confusing, don't worry. I promise everything will start making sense very soon, especially once you see how we use the render method!