On 3/5/06, Leah Cunningham <leah / heinous.org> wrote:
> 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
>

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