14

我在使用 rails render_to_string 函数时遇到了困难。我已经使用 --api 标志创建了一个应用程序,所以我认为这可能是问题所在,因为我已经在“完整”rails 应用程序中进行了测试,并且它的工作正常。

基本上我在打电话:

body_html = render_to_string(template: 'reservations/print')

我也试过

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')

它应该返回该模板的 html。文件名是 print.html.erb 并且只有基本数据,即

<p> Hello world. </p>

当我输出 body_html 它是空的。

我引用了这个 SO 问题What is the correct way to render_to_string in wicked pdf?我还将使用 Wicked PDF 生成 pdf 文件。

非常感谢

4

4 回答 4

15

虽然我不认为这是执行以下工作的最佳解决方案。

ac = ActionController::Base.new()  

html_string = ac.render_to_string :template => 'path_to_file' e.g. 'post/show'

Rails API 模式下的Application Controller 文件继承自ActionController::API,所以我猜想渲染的功能在ActionController::Base 中。

于 2016-12-08T22:48:33.977 回答
2

你可以在你的行动中做这样的事情:

     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}
     }
于 2019-09-19T23:44:37.537 回答
1

尝试以下代码段:

ActionController::Base.new.render_to_string("mailer/your-html-file", locals: { data: your-json-data-that-you-wanna-add-to-your-html-file })
于 2021-02-13T05:25:42.430 回答
0

这是对我来说很好的解决方案:

render_to_string partial: 'participant_data.html.erb'

该文件必须像这样命名:

tickets/_participant_data.html.erb
于 2020-10-02T09:18:27.850 回答