Posted about 4 years ago. Visible to the public.

Render a view from a model in Rails

In Rails 5 you can say:

Copy
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):

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

In Rails 3 and 4 you can say:

Copy
ApplicationController.new.render_to_string( :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
Growing Rails Applications in Practice
Check out our new e-book:
Learn to structure large Ruby on Rails codebases with the tools you already know and love.

Author of this card:

Avatar
Henning Koch
Last edit:
3 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 makandropedia