我需要在控制器的类中渲染Sinatra erb模板。我有问题这个问题。我查看了Sinatra rdocs,并想出了这个:
Sinatra::Templates.erb :template_to_render
当我这样做时,我收到以下错误:
undefined method `erb' for Sinatra::Templates:Module
有没有办法从另一个类调用它?
答案 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)
您可以让您的类返回模板名称并在主应用程序中呈现它。
当然这不是一个完全答案(我没有足够的代表来为这个帐户添加评论)而且你现在也可能正在这样做...