I was looking at my controller code (Rails) and the
edit/create/update/new for
each are practically identical. So first I DRY’d the four methods in
each controller to just one and then I decided to write a single macro
for all my controllers.
This is the macro:
def self.edit_action_for(model, options = {})
model_class = Object.const_get(model)
define_method(:edit) do
edit_code = lambda do
@thing = model_class.find_by_id(params[:id]) || model_class.new
if request.post?
@thing.attributes = params[:impactable_area]
if @thing.save
flash[:notice] = “#{model.humanize} successfully saved.”
redirect_to :action => ‘list’
end
end
end
end
end
Then I expected this
edit_action_for :ImpactableArea
to create my “edit” method.
Problem is that it doesn’t
So then I looked to see how I could do a macro expansion (as you can in
Lisp) to see what’s being produced and I couldn’t find anything…
HELP!
Edward