Подтвердить что ты не робот

Выход в ERB без рельсов

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

4b9b3361

Ответ 1

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

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

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

Альтернативно альтернативно используйте Rails или Merb или Sinatra.

Ответ 2

def a
  ERB.new('<%= yield %>').result(binding)
end
a{123}
#=> "123"

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

Ответ 3

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

Ответ 4

Вы можете использовать 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

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