2010-03-08 56 views
7

我需要在控制器的类中呈现Sinatra erb模板。我有问题调用此,但。我看着在西纳特拉rdocs,并拿出了这一点:从另一个类中调用Sinatra erb

Sinatra::Templates.erb :template_to_render 

当我这样做,我得到以下错误:

undefined method `erb' for Sinatra::Templates:Module 

有没有办法从另一个类调用此?

+0

对此有什么答案了吗? – seenickcode 2014-07-27 06:57:17

回答

0

你为什么不要求“再培训局”,使用后仅ERB


    ## You'll need to require erb in your app 
    require 'erb' 

    get '/' do 
    erb :index 
    end 
+0

谢谢,但这不适合我在做什么。这些说明比较陈旧,不适用于当前版本的Sinatra。理想情况下,我想使用内置erb的Sinatra。 – Eugene 2010-03-08 17:06:12

+0

哪个版本的sinatra? – shingara 2010-03-08 17:50:43

0

你可以有你的类返回模板名称,使其在主应用程序。

当然,这不完全是一个答案(我没有足够的代表加入这个帐户的注释),你很可能由现在反正正是这样做的...

1

模仿呈现行为在其他一些类(不控制器)西纳特拉控制器,你可以这样建立模块:

module ErbRender 

    include Sinatra::Templates 
    include Sinatra::Helpers 
    include Sinatra::ContentFor 

    def settings 
    @settings ||= begin 
     settings = Sinatra::Application.settings 
     settings.root = "#{ROOT}/app" 
     settings 
    end 
    end 

    def template_cache 
    @template_cache ||= Tilt::Cache.new 
    end 

end 

在这里,您可能需要调整settings.root

用例:

class ArticleIndexingPostBody 

    include ErbRender 

    def get_body 
    erb :'amp/articles/show', layout: :'amp/layout' 
    end 

end 

这将正确渲染布局模板,包括content_for