【问题标题】:Call Sinatra erb from another class从另一个班级调用 Sinatra erb
【发布时间】:2016-09-09 03:38:14
【问题描述】:

我需要在我的控制器的一个类中渲染一个 Sinatra erb 模板。我在调用这个时遇到了问题。我查看了 Sinatra rdocs 并提出了这个:

Sinatra::Templates.erb :template_to_render

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

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

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

【问题讨论】:

  • 对此有任何答案吗?

标签: ruby sinatra


【解决方案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在内的布局的模板

【讨论】:

    【解决方案2】:

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

    
      ## You'll need to require erb in your app
      require 'erb'
    
      get '/' do
        erb :index
      end
    

    【讨论】:

    • 谢谢,但这不适用于我正在做的事情。这些说明相当陈旧,不适用于当前版本的 Sinatra。理想情况下,我想使用 Sinatra 内置的 erb。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多