Probably asked and answered, but…
Why are controller private methods inaccessible inside the block
passed to render :update ?
This does not work:
class MyController < ApplicationController
def some_action
render :update do |page|
page.replace_html ‘an_element’, some_private_method
end
end
private
def some_private_method
return ‘data’
end
end
I think this works:
class MyController < ApplicationController
def some_action
some_private_method
render :update do |page|
page.replace_html ‘an_element’, variable_name
end
end
private
def some_private_method
variable_name = return ‘data’
end
end
On 6 Dec 2007, at 16:10, ebrad wrote:
I think this works:
Guaranteed not to work - you’re just creating a local_variable in a
completely different scope.
Like i said in a similar thread, a render :update block behaves like a
normal view: instance variable are copied over. If you want controller
instance methods to be available, they need to be helper methods (see
documentation for helper_method)
Fred
Frederick C. wrote:
Like i said in a similar thread, a render :update block behaves like a
normal view: instance variable are copied over. If you want controller
instance methods to be available, they need to be helper methods (see
documentation for helper_method)
That’s useful to know.
An alternative is to call controller instance methods from inside
the render block like “controller.meth”, or “controller.send(:meth)”
for private methods.
–
We develop, watch us RoR, in numbers too big to ignore.
On Dec 6, 11:40 am, Mark Reginald J. [email protected] wrote:
Frederick C. wrote:
Like i said in a similar thread, a render :update block behaves like a
normal view: instance variable are copied over. If you want controller
instance methods to be available, they need to be helper methods (see
documentation for helper_method)
That’s useful to know.
Yes, but somewhat unexpected. But
An alternative is to call controller instance methods from inside
the render block like “controller.meth”, or “controller.send(:meth)”
for private methods.
Thanks for that. Ruby is the only language I have that used
that supports closures while also allowing methods to be called
without an
explicit object. I expected that ‘self’ would be bound inside
the closure at the time the closure was defined.