2013-05-06 17 views
0

我需要创建一些HTML文件,并希望将我的局部人已经做到显示视图。 我以前用markaby来做这件事,但现在我认为用haml这件事情会更容易。 我想要做的事:渲染哈姆与部分内部的局部人和局部人到HTML文件

Haml::Engine.new(File.read("#{Rails.root}/app/views/metric_box_sets/_metric_box_set.html.haml"), 
:format => :html5, :ugly => true).render(Object.new,locals =>{:metric_box_set=>@metric_box_set}) 

的部分,我使用,我访问metric_box_set几次,还可能导致其他的谐音,给他们与此相关的一个其他对象。问题在于渲染方法出错。有一些方法可以告诉它,它应该使用的渲染方法是普通的渲染方法?

Tnks!

+0

你在哪里使用此代码?你在哪里设置'@ metric_box_set'? – cortex 2013-05-06 17:35:19

+0

这是一个错字或一个错误,你有'Object.new,locals = {:metric ...}'而不是'Object.new,locals => {:metric ...}'(注意'''正确完成哈希火箭)? – nzifnab 2013-05-06 17:38:28

+0

现在我只是在控制台中测试它,我想创建一个worker来生成这个html文件来改善服务器的响应,但是那个变量是一个活动的记录对象,我在执行这一行之前设置它。 – tbem 2013-05-06 17:40:48

回答

0

我发现其他解决方案来做到这一点。 除了使用Haml :: Engine之外,一旦我们已经在rails中,并且我们可以使用渲染本身,我在模型中创建了一个to_html函数,并包含应用程序帮助程序以获取我在部分中使用的helper_methods。则使用的渲染结果打印到文件:

def to_html 
    ActionView::Base.send :include, ActionView::Helpers::ApplicationHelper 

    File.open(File.join(Rails.root, "public", 'test.html'), "w") do |file| 

    file.print ActionView::Base.new(Rails.configuration.paths["app/views"].first).render(
       :partial => 'metric_box_sets/metric_box_set', 
       :format => :html, 
       :locals => { :metric_box_set => self} 
      ) 
    end 
end 

这样我可以生成我需要根据我已经做了所有意见HTML片段。

-1

你有一个错字 - locals =>应该locals =