Views and bindings


#1

hello all, I was hoping someone could describe to me how this works.

Say I have some block of code like this

<% my_cool_block do %>
<% my_var = 5 %>
<%= some_helper_method “My var” %>
<% end %>

And in my helper

def my_cool_block(&block)
content = capture(&block)
concat(content, block.binding)
end

def some_helper_method(text)
"#{text} = #{my_var}
end

How can i get some_helper_method to ‘know’ about my_var which is in the
scope of the my_cool_block block? And even better yet, how could I get
the some_helper_method only to work when it is nested inside a
my_cool_block block?

Let me know if I can clarify anything for you.

Thanks!


#2

On Dec 1, 8:02 pm, Joe B. removed_email_address@domain.invalid wrote:

scope of the my_cool_block block? And even better yet, how could I get
the some_helper_method only to work when it is nested inside a
my_cool_block block?

Well you could probably do it by messing around with bindings and eval
but that sounds like a sucky design. why not do something similar to
form_for, ie your my_cool_block method yields an object encapsulating
the state you want to share in its instance variables. usage could be

<% my_cool_block(5) do |helper| %>
<%= helper.some_helper_method "My var %>
<% end %>

you could do other stuff too, eg call helper.with_value(5) and for the
block passed to with_value, my_var would have value 5

Fred


#3

def my_cool_block(&block)
content = capture(&block)
concat(content, block.binding)
end

FYI, block.binding is no longer required in Rails 2.2.2, and should
raise a warning in the log.


#4

Frederick C. wrote:

On Dec 1, 8:02�pm, Joe B. removed_email_address@domain.invalid wrote:

scope of the my_cool_block block? And even better yet, how could I get
the some_helper_method only to work when it is nested inside a
my_cool_block block?

Well you could probably do it by messing around with bindings and eval
but that sounds like a sucky design. why not do something similar to
form_for, ie your my_cool_block method yields an object encapsulating
the state you want to share in its instance variables. usage could be

<% my_cool_block(5) do |helper| %>
<%= helper.some_helper_method "My var %>
<% end %>

you could do other stuff too, eg call helper.with_value(5) and for the
block passed to with_value, my_var would have value 5

Fred

Sorry for my ignorance but could you explain how would you do that. How
would you yield and concat? A quick example would be worth a 1000 words
:slight_smile: