Forum: Ruby on Rails Views and bindings

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Joe B. (Guest)
on 2008-12-01 22:02
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!
Frederick C. (Guest)
on 2008-12-01 22:11
(Received via mailing list)
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
Fernando P. (Guest)
on 2008-12-01 23:58
> 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.
Joe B. (Guest)
on 2008-12-02 01:23
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
:)
This topic is locked and can not be replied to.