Recently, I was creating some in_place_editors for a polymorphic controller I’m working on. Although the problems not particular to polymorphic controllers, I didn’t want to embed too much model information within the controller. I came up with a way to use meathod_missing to define the in_place_editor_for on demand:

class ResourcesController << ApplicationController
  def method_missing(method_id, *args)
    if method_id.to_s.match(/set_resource_(.*)$/) && @resource.respond_to?($1)
      property = $1

      # Defines "set_resource_#{property}" on the fly
      self.class.in_place_edit_for(:resource, property)

      # Call the newly defined method
      self.send("set_resource_#{property}", args)
    else
      super
    end
  end
end