Add view helpers to a Rails application, globally and locally
By the end of this post you will have a better idea of how to handle application data processing in Rails views.
For the first example, lets say you wanted to translate text in your footer like so:
<!-- _footer.html.erb -->
<footer>
<div><%= translate("copyright") %></div>
<div><%= translate("privacy-policy") %></div>
<div><%= translate("faq") %></div>
</footer>
Since your footer will likely be a partial used across most if not all templates rendered by a controller you can add the translate
view helper method used above to application_controller.rb
. This will make the method accessible from any other controller and also if you invoke helper_method
it will also be available across all view templates. This is what that would look like:
# application_controller.rb
helper_method :translate
def translate(text)
# handle translation behavior
end
If you only wanted the method available in a specific template, you can add the method to the controller that renders that template:
# users_controller.rb
helper_method :translate_user_details
def translate_user_details(text)
# handle translation behavior
end
After creating these functions and their helper methods they can be invoked in their respective views as shown in the _footer.html.erb
example above.