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!