Hi! On 6/8/06, Edward Kenworthy <edward / kenworthy.info> wrote: > 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 > > -- > Posted via http://www.ruby-forum.com/. > > Your code should work fine if you remove the lammbda from inside the define_method block. -- Ezra Zygmuntowicz ezmobius / gmail.com "Rubyists don't throw rocks at dogs"