Forum: Ruby changing the value of a hash

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Jf R. (Guest)
on 2008-11-09 22:22
Hi

I have an active record object collection. I want to change the value of
the key called "mail".

@users.collect {|s|s.attributes.x_method { if key == mail then replace @
something else (ex: value.gsub(/@/," (at) ")  }}.to_json

How can I achieve my gold?

thanks
jf
Brian C. (Guest)
on 2008-11-10 00:14
Jf Rejza wrote:
> I want to change the value of
> the key called "mail".

I'd probably just write something simple like:

  h = s.attributes
  h['mail'].gsub!('@',' (at) ') if h['mail']

If you really want to iterate, then

  h = s.attributes
  h.each { |k,v| h[k] = v.gsub('@',' (at) ') if k=='mail' && v }

And if you want to write it as a one-liner, look at inject or merge. If
you know there's always a mail attribute, then:

  s.attributes.merge( 'mail' => s.attributes['mail'].gsub('@',' (at) '
).to_json
This topic is locked and can not be replied to.