Rails render_to_string

时间:2016-11-08 15:16:49

标签: ruby-on-rails render-to-string

我在使用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时,它是空的。

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

非常感谢

4 个答案:

答案 0 :(得分:3)

虽然我不认为这是做下面工作的最佳解决方案。

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中。如果有人知道Base需要哪个模块,我会更新这个答案吗?

由于 鲁迪

答案 1 :(得分:0)

您可以在操作中执行以下操作:

     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}
     }

答案 2 :(得分:0)

这是适合我的解决方案:

// Given "input" is your Dictionary<string,Dictionary<string,object>>
var result = input.OrderBy(kv => kv.Value["Temp"]);

文件必须这样命名:

render_to_string partial: 'participant_data.html.erb'

答案 3 :(得分:0)

试试下面的代码片段:

ActionController::Base.new.render_to_string("mailer/your-html-file", locals: { data: your-json-data-that-you-wanna-add-to-your-html-file })