I’ve often felt the need including Rails’ view helpers within my
controllers, if only for some simple things like formatting my flash
notices with text helpers or html escaping. I loved this suggestion,
which helps by not cluttering the namespace of controllers:
http://snippets.dzone.com/posts/show/1799
But I wanted to generalize this a little to automatically include
whatever helper modules are included in the views. So I dreamt up 35
lines of goodness:
class Object
def metaclass; class << self; self; end; end
end
module ActionController
class Base
class_inheritable_accessor :controller_helper_module
class_inheritable_accessor :controller_helper_object
self.controller_helper_module = Module.new
self.controller_helper_object = Object.new
class << self
def add_template_helper_with_controller_helper(helper_module)
self.controller_helper_module.send(:include, helper_module)
recreate_controller_helper_object
add_template_helper_without_controller_helper(helper_module)
end
alias_method_chain :add_template_helper, :controller_helper
def inherited_with_controller_helper(child)
inherited_without_controller_helper(child)
child.controller_helper_module.send :include,
controller_helper_module
child.recreate_controller_helper_object
end
alias_method_chain :inherited, :controller_helper
def recreate_controller_helper_object
self.controller_helper_object = Object.new
self.controller_helper_object.metaclass.send(:include,
controller_helper_module)
end
end
protected
def help
self.class.controller_helper_object
end
end
end
===
I understand some people will balk at the idea of including these
helpers in controllers, and I understand their reasons. I guess I’m
just looking for criticism of the code, given that some people do want
to do this kind of thing.
It seems to work just fine in Rails 2.0, but I wonder if there are any
performance problems or if there is something technically incorrect
that jumps out at people.
– Ara