[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

dynamic assignment of iterator name

Leah Cunningham

3/5/2006 11:08:00 PM

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.

--
Posted via http://www.ruby-....


1 Answer

Wilson Bilkovich

3/5/2006 11:13:00 PM

0

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