# Eruby cutting off top / binding issue

**URL:** <https://rubytalk.org/t/eruby-cutting-off-top-binding-issue/42682>\
**Category:** ruby-talk\
**Created:** [2 December 2007 21:31 UTC](https://rubytalk.org/t/eruby-cutting-off-top-binding-issue/42682 "2007-12-02T21:31:53Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![7rans](https://avatars.discourse-cdn.com/v4/letter/7/a8b319/32.png) [@7rans](https://rubytalk.org/u/7rans)\
**Post date:** [2 December 2007 21:31 UTC](https://rubytalk.org/t/eruby-cutting-off-top-binding-issue/42682/1 "2007-12-02T21:31:53Z")

</div>

I'm trying to use ERB bound to a controlled context, and it's failing  
when it build a template within another template.  
If you have any insights about this please let me know. I'm simply at  
a loss.

This is a minimal model of the problem I'm having:

&nbsp;&nbsp;require 'erb'

&nbsp;&nbsp;class Context

&nbsp;&nbsp;&nbsp;&nbsp;def initialize(page)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@page = page  
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;def render(\*a)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@page.render(\*a)  
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;end

&nbsp;&nbsp;class Page

&nbsp;&nbsp;&nbsp;&nbsp;def initialize  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@context = Context.new(self)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@binding = @context.instance\_eval{ binding }  
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;def in1  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%{  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WAY UP HERE  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\<%= render('in2') %\>  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WAY DOWN HERE  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;def in2  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%{  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RIGHT UP HERE  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\<%= render('in3') %\>  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RIGHT DOWN HERE  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;def in3  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"IN THE MIDDLE"  
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;def render(var)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input = eval(var)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template = ERB.new(input)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template.result(@binding)  
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;end

&nbsp;&nbsp;puts Page.new.render('in1')

I'm getting:

&nbsp;&nbsp;IN THE MIDDLE  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RIGHT DOWN HERE

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WAY DOWN HERE

Instead of the expected:

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WAY UP HERE

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RIGHT UP HERE  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IN THE MIDDLE  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RIGHT DOWN HERE

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WAY DOWN HERE

Why is it cutting off the top? It makes now sense. If I remove the  
context by changing to:

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template.result(binding)

Then it works fine.

T.
