# Dynamic assignment of iterator name

**URL:** <https://www.ruby-forum.com/t/dynamic-assignment-of-iterator-name/77097>\
**Category:** Ruby\
**Created:** [March 6, 2006, 12:07am UTC](https://www.ruby-forum.com/t/dynamic-assignment-of-iterator-name/77097 "2006-03-06T00:07:32Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![heinous](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/e95f7d/32.png) [@heinous](https://www.ruby-forum.com/u/heinous)\
**Post date:** [March 6, 2006, 12:07am UTC](https://www.ruby-forum.com/t/dynamic-assignment-of-iterator-name/77097/1 "2006-03-06T00:07:32Z")

</div>

I apologize if this is a foolish questions, but I am new to the language  
and having trouble finding an example of what I am looking to do (if  
it’s possible.)

I would like to know if there is a way to pass in the name of the  
iterator to use from a variable or similar. I am looking to do  
something like:

```
    params[:user].each_key do |attr|
      user.attr = params[:user][attr]
    end

```

For now I can just use a giant case statement like this:

```
    params[:user].each_key do |attr|
      case attr
        when "givenName"
          user.givenName = params[:user][attr]
        when "sn"
          user.sn = params[:user][attr]
        when "mail"
          user.mail = params[:user][attr]
        when "o"
          user.o = params[:user][attr]
      end
    end

```

But it would be nice to know if there is a cleaner way to handle this.

---

<div class="post-metadata">

**Author:** ![heinous](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/e95f7d/32.png) [@heinous](https://www.ruby-forum.com/u/heinous)\
**Post date:** [March 6, 2006, 12:15am UTC](https://www.ruby-forum.com/t/dynamic-assignment-of-iterator-name/77097/2 "2006-03-06T00:15:06Z")

</div>

On 3/5/06, Leah C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ```
> end
> user.mail = params[:user][attr]
> when "o"
> user.o = params[:user][attr]
> end
> end
> 
> ```

You can use “send” for this, and using the multi-variable block on  
‘each’ will save you a further step.

params[:user].each do |key, value|  
user.send(“#{key}=”, value)  
end
