Reputation: 625
I am having difficulty with the rails render_to_string function. I have created an app using the --api flag, so i think this may be the issue as i have tested in 'full' rails apps and its works just fine.
Essentially i am calling:
body_html = render_to_string(template: 'reservations/print')
I have also tried
body_html = render_to_string('reservations/print')
body_html = render_to_string(partial: 'reservations/print')
body_html = render_to_string(partial: 'reservations/print.html.erb')
which should return the html for that template. The filename is print.html.erb and just has basic data i.e.
<p> Hello world. </p>
When i output the body_html it is empty.
I referenced this SO question What is the correct way to render_to_string in wicked pdf? and am also going to use Wicked PDF to generate a pdf file.
Many thanks
Upvotes: 19
Views: 28106
Reputation: 625
Whilst I do not think this is the best solution doing the following worked.
ac = ActionController::Base.new
html_string = ac.render_to_string(template: 'path_to_file') # e.g. 'posts/show'
The Application Controller file in Rails API mode inherits from ActionController::API
, so I guess the functionality to render is in ActionController::Base
.
Upvotes: 18
Reputation: 369
Try the following snippet code:
ActionController::Base.new.render_to_string("mailer/your-html-file", locals: { data: your-json-data-that-you-wanna-add-to-your-html-file })
Upvotes: 6
Reputation: 4156
This is the solution that work fine for me:
render_to_string partial: 'participant_data.html.erb'
The file must be named like this:
tickets/_participant_data.html.erb
Upvotes: 0
Reputation: 701
You can do something like this inside your action:
respond_to do |format|
format.html { render layout: 'your_layout' } # this is for your html responses if you need to respond with html
format.json { # this block will execute for your json requests
html = render_to_string action: :index, layout: false, :formats => [:html]
render json: {data: html}
}
Upvotes: 2