# Ugly First Crack at some Metaprogramming

**URL:** <https://www.ruby-forum.com/t/ugly-first-crack-at-some-metaprogramming/121656>\
**Category:** Rails\
**Created:** [November 29, 2007, 6:09pm UTC](https://www.ruby-forum.com/t/ugly-first-crack-at-some-metaprogramming/121656 "2007-11-29T18:09:42Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![blinking\_bear](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/a9a28c/32.png) [@blinking\_bear](https://www.ruby-forum.com/u/blinking_bear)\
**Post date:** [November 29, 2007, 6:09pm UTC](https://www.ruby-forum.com/t/ugly-first-crack-at-some-metaprogramming/121656/1 "2007-11-29T18:09:42Z")

</div>

Hey - this is pretty ugly and probably not even considered  
Metaprogramming,  
but have a look/laugh and please suggest a more elegant way:

Basically, I just want to loop through an array of variables to look for  
in  
the params hash and set them to instance variables with the same name or  
set  
them to ‘’ if non-existant in the hash:

_[:criteria, :sort\_by, :ord].each { |key| eval("@#{key} =  
params[:#{key}] ||  
‘’") }_

all this does is just evaluate the following lines:

@criteria = params[:criteria]  
@sort\_by = params[:sort\_by]  
etc…

Better ideas?

Thanks

---

<div class="post-metadata">

**Author:** ![blinking\_bear](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/a9a28c/32.png) [@blinking\_bear](https://www.ruby-forum.com/u/blinking_bear)\
**Post date:** [November 29, 2007, 6:32pm UTC](https://www.ruby-forum.com/t/ugly-first-crack-at-some-metaprogramming/121656/2 "2007-11-29T18:32:38Z")

</div>

On Nov 29, 2007 12:09 PM, blinking bear [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> all this does is just evaluate the following lines:
> 
> @criteria = params[:criteria]  
> @sort\_by = params[:sort\_by]

I’m not sure what this is buying you.

You might consider using Object#instance\_variable\_set instead of eval.
