Позвоните Синатре Эрбу из другого класса - PullRequest
7 голосов
/ 08 марта 2010

Мне нужно отобразить шаблон Sinatra erb внутри класса в моем контроллере. У меня проблемы с этим. Я посмотрел в Rdocs Синатры и придумал это:

Sinatra::Templates.erb :template_to_render

Когда я это делаю, я получаю следующую ошибку:

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

Есть ли способ вызвать это из другого класса?

Ответы [ 3 ]

1 голос
/ 08 сентября 2016

Чтобы имитировать поведение рендеринга контроллера 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

0 голосов
/ 06 ноября 2014

Ваш класс может вернуть имя шаблона и отобразить его в главном приложении.

Конечно, это не совсем ответ (мне не хватает представителя, чтобы добавить комментарий к этому аккаунту), и вы, вероятно, делаете это сейчас, в любом случае ...

0 голосов
/ 08 марта 2010

почему вам не требуется 'erb', а после использования только erb


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

  get '/' do
    erb :index
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...