有没有办法让一个普通的ruby类使用erb/haml模板?

问题描述:

基本上,我有一些输出HTML的类:有没有办法让一个普通的ruby类使用erb/haml模板?

class Foo 
    include ActionView::Helpers 

    def initialize(stuff) 
    @stuff = stuff 
    end 

    def bar 
    content_tag :p, @stuff 
    end 

end 

所以我可以做:Foo.new(123)的.bar

并获得 “<p/P>”

...但我真正想要做的是这样的:

class Foo << ActionView::Base 

    def initialize(stuff) 
    @stuff = stuff 
    end 

    def bar 
    render :template => "#{Rails.root/views/foo/omg.html.erb}" 
    end 

end 

# views/omg.html.erb 

<h1>Wow, stuff is <%= @stuff %></h1> 

和TH恩做Foo.new(456)的.bar并获得 “<H1>哇,东西456 </H1 >”

+0

试试看http://yehudakatz.com/2009/07/19/rails-3-the-great-decoupling/可能会有所帮助。 –

只需直接调用erb?例如:

def bar 
    template = ERB.new(File.read("#{Rails.root}/views/foo/omg.html.erb")) 
    template.result(binding) 
end 
+0

我不假设你知道如何做到这一点,而是渲染一个haml模板呢? – patrick