Posted almost 5 years ago. Visible to the public.

Render a view from a model in Rails

In Rails 5 you can say:

ApplicationController.render( :template => 'users/index', :layout => 'my_layout', :assigns => { users: @users } )

If a Request Environment is needed you can set attributes default attributes or initialize a new renderer in an explicit way (e.g. if you want to use users_url in the template):

ApplicationController.renderer.defaults # => { http_host: '', https: false, ... }
renderer = http_host: '', https: false ) renderer.render( :template => 'users/index', :layout => 'my_layout', :assigns => { users: @users } )

In Rails 3 and 4 you can say:

Copy :template => 'users/index', :layout => 'my_layout', :locals => { :@users => @users } )

Mind the weird syntax to set @ variables in :locals.

Hat tip to BitCrowd. You can also backport the rails 5 new renderer

Use case

  • Render pdfs with e.g. pdfkit from html to attach to an email or a model
  • Generate slow reports async

By refactoring problematic code and creating automated tests, makandra can vastly improve the maintainability of your Rails application.

Author of this card:

Henning Koch
Last edit:
10 months ago
by Emanuel De
About this deck:
We are makandra and do test-driven, agile Ruby on Rails software development.
License for source code
Posted by Henning Koch to makandra dev