2010-03-08 42 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