从另一个班级打电话给Sinatra erb

时间:2010-03-08 14:37:53

标签: ruby sinatra

我需要在控制器的类中渲染Sinatra erb模板。我有问题这个问题。我查看了Sinatra rdocs,并想出了这个:

Sinatra::Templates.erb :template_to_render

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

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

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

3 个答案:

答案 0 :(得分:1)

要在其他类(非控制器)中模仿Sinatra控制器的渲染行为,您可以创建如下模块:

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

等布局的模板

答案 1 :(得分:0)

为什么你不需要'erb'并且在使用后只需要erb


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

  get '/' do
    erb :index
  end

答案 2 :(得分:0)

您可以让您的类返回模板名称并在主应用程序中呈现它。

当然这不是一个完全答案(我没有足够的代表来为这个帐户添加评论)而且你现在也可能正在这样做...