Render :update and controller private methods

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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs