def content_tag(name, content_or_options_with_block = nil,
options = nil, &block)
if block_given?
options = content_or_options_with_block if
content_or_options_with_block.is_a?(Hash)
content = capture(&block)
concat(content_tag_string(name, content, options),
block.binding)
else
content = content_or_options_with_block
content_tag_string(name, content, options)
end
end
If you give it a block, it calls concat(content_tag_string(name,
content, options), block.binding).
module StoreHelper
def hidden_div_if(condition, attributes = {})
if condition
attributes["style" ] = "display: none"
end
content_tag("div" , attributes) {yield}
end
...
If you use content_tag("div" , attributes) {yield} inside your
hidden_div_if(), when concat inside content_tag() will be called w/
the binding of you block: {yield}, which has the StoreHelper's context
as to your View's context: (the original block passed in
hidden_div_if). As a result, when concat() gets called inside
content_tag, it doesn't have the right binding and hence missing:
"_erbout." I hope this helps.
Arnaud take a look at the Rails source for content_tag: Parked at Loopia
def content_tag(name, content_or_options_with_block = nil,
options = nil, &block)
if block_given?
options = content_or_options_with_block if
content_or_options_with_block.is_a?(Hash)
content = capture(&block)
concat(content_tag_string(name, content, options),
block.binding)
else
content = content_or_options_with_block
content_tag_string(name, content, options)
end
end
If you give it a block, it calls concat(content_tag_string(name,
content, options), block.binding).
module StoreHelper
def hidden_div_if(condition, attributes = {})
if condition
attributes["style" ] = "display: none"
end
content_tag("div" , attributes) {yield}
end
...
If you use content_tag("div" , attributes) {yield} inside your
hidden_div_if(), when concat inside content_tag() will be called w/
the binding of you block: {yield}, which has the StoreHelper's context
as to your View's context: (the original block passed in
hidden_div_if). As a result, when concat() gets called inside
content_tag, it doesn't have the right binding and hence missing:
"_erbout." I hope this helps.
Thanks - that confirms what I implied, when I was too lazy to look up the actual method!