2010-03-17 2 views
12

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

ответ

3

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

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

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

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

+0

Несмотря на пониженные голоса, макеты и наследование шаблонов являются частью Rails, а не самого ERB. –

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

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

+0

Мне не удалось заставить это работать. Как ERB знает, что это должно быть рендеринг в доходности? –

5

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

3

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

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 

Я нашел ответ here.

Смежные вопросы