доходность в ERB без рельсов - PullRequest
14 голосов
/ 17 марта 2010

Как я могу использовать yield для наследования шаблонов в erb? Я хочу использовать erb в простом рубиновом CGI-скрипте и хочу использовать базовый шаблон и подшаблет, как в Rails с шаблоном приложения.

Ответы [ 5 ]

37 голосов
/ 19 сентября 2010
def a
  ERB.new('<%= yield %>').result(binding)
end
a{123}
#=> "123"

Важно, чтобы вызов Kernel#binding был внутри метода, чтобы контекст включал блок (ERB#result не будет принимать блок).

5 голосов
/ 02 ноября 2011

Проверьте Tilt (http://github.com/rtomayko/tilt/).) Это камень, который обрабатывает шаблоны в Sinatra, и он обеспечивает доходность ERB вместе со многими другими приятными функциями.

3 голосов
/ 18 марта 2014

Вы можете использовать Tilt, но если вы не хотите добавлять дополнительную зависимость, вот лучший пример того, как вы можете получить в erb:

require "erb"

class Controller
  TEMPLATE = ERB.new("Hello <%= @someone %>\n\n<%= yield %>")

  def initialize(someone)
    @someone = someone
  end

  def render
    TEMPLATE.result(self.get_binding { yield })
  end

  def get_binding
    binding
  end
end

puts Controller.new("World").render { "I'm Jack" }
# =>
Hello World

I'm Jack

Я нашел ответ здесь .

3 голосов
/ 18 марта 2010

Не думаю, что вы можете - Rails предоставляет эту инфраструктуру как часть actionpack.

Что вы можете сделать, это взять пакет действий и добавить его в свой скрипт.

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

В качестве альтернативы можно использовать Rails или Merb или Sinatra.

0 голосов
/ 21 августа 2015

Я писал о добавлении этого в ERB Стандартной библиотеки здесь http://hostiledeveloper.com/2015/05/28/working-with-templates-in-ruby-erb.html

Это удивительно боль в заднице.

...