2012-03-23 4 views
7

Je veux faire quelque chose comme ceci:Comment implémenter les partiels erb dans une application non-rails?

require 'erb' 
@var = 'test' 
template = ERB.new File.new("template.erb").read 
rendered = template.result(binding()) 

Mais comment puis-je utiliser Partials dans template.erb?

+0

Copie possible de http://stackoverflow.com/a/2467313/772874 Vous avez besoin de 'ActionView' pour cela. –

Répondre

6

Peut-être force brute-il?

header_partial = ERB.new(File.new("header_partial.erb").read).result(binding) 
footer_partial = ERB.new(File.new("footer_partial.erb").read).result(binding) 

template = ERB.new <<-EOF 
    <%= header_partial %> 
    Body content... 
    <%= footer_partial %> 
EOF 
puts template.result(binding) 
+0

Merci! C'est exactement ce que j'ai trouvé aussi;) – bluegray

+0

Y at-il une gemme qui pourrait aider avec ça? – Kirby

1

a essayé de trouver la même chose et n'a pas trouvé beaucoup qui était satisfaisant autre que d'utiliser le Tilt gem, qui enveloppe ERB et d'autres systèmes de matriçage et prend en charge les blocs passant (aka, les résultats d'un séparé rendent appel) qui peut être un peu plus agréable.

Vu sur: https://code.tutsplus.com/tutorials/ruby-for-newbies-the-tilt-gem--net-20027

layout.erb

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8" /> 
    <title><%= title %></title> 
</head> 
<body> 
    <%= yield %> 
</body> 
</html> 

Puis dans votre appel rubis

template = Tilt::ERBTemplate.new("layout.erb") 

File.open "other_template.html" do |file| 
    file.write template.render(context) { 
     Tilt::ERBTemplate.new("other_template.erb").render 
    } 
end 

Il appliquera les résultats de l'other_template dans le corps yield.

Questions connexes