2010-03-17 7 views
12

Comment utiliser céder pour l'héritage de gabarit dans erb? Je veux utiliser erb dans un script CGI ruby ​​ordinaire et je veux utiliser un template de base et un sous-modèle comme Rails avec le template d'application.céder dans ERB sans rails

Répondre

3

Je ne pense pas que vous le pouvez - Rails fournit cette infrastructure dans le cadre de l'actionpack.

Ce que vous pouvez faire est de prendre actionpack et l'ajouter dans votre script.

Vous pouvez également rouler vous-même un système de gabarit léger.

Alternativement, utiliser alternativement Rails ou Merb ou Sinatra.

+0

Malgré les votes négatifs, les mises en page et l'héritage de modèle font partie de Rails, et non de ERB lui-même. –

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

Il est important que l'appel à Kernel#binding être à l'intérieur d'une méthode, de cette façon le contexte comprend le bloc (ERB#result ne prendra pas un bloc).

+0

Je n'ai pas réussi à faire fonctionner ça. Comment ERB sait-il que cela devrait rendre le rendement? –

3

Vous pouvez utiliser Tilt mais si vous ne voulez pas ajouter une dépendance supplémentaire, voici un meilleur exemple sur la façon dont vous pouvez donner à 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 

Je trouve la réponse here.

Questions connexes