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"