Create a new hash from an existing table

18 views
Skip to first unread message

edward michaels

unread,
Feb 11, 2012, 8:40:28 PM2/11/12
to Ruby on Rails: Talk
I have an active record Times table with a date column and an hour
column. The hours are unique but the dates can have many hours. How
would I create a hash that mapped a date key to its hours? Something
like:

hours_per_date['2/14/2012'] => ['6:00', '8:00', '11:00', '2:00']

Thanks

Everaldo Gomes

unread,
Feb 11, 2012, 8:50:41 PM2/11/12
to rubyonra...@googlegroups.com
Hi!

Take a look at:


and


I think they could help.

E.g:

hash = Time.all.collect { |t| [ t.date  , t.hour ] }.group_by { |date,hour| date.strftime("%-m/%-d/%Y") }

I hope it works.

Regards,
Everaldo


--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.


Everaldo Gomes

unread,
Feb 11, 2012, 9:09:34 PM2/11/12
to rubyonra...@googlegroups.com
On Sat, Feb 11, 2012 at 11:50 PM, Everaldo Gomes <everald...@gmail.com> wrote:
Hi!

Take a look at:


and


I think they could help.

E.g:

hash = Time.all.collect { |t| [ t.date  , t.hour ] }.group_by { |date,hour| date.strftime("%-m/%-d/%Y") }

I forgot that after using group_by you will have to discard the date from the hash values.

edward michaels

unread,
Feb 13, 2012, 2:00:39 AM2/13/12
to Ruby on Rails: Talk
Thanks, your idea did help.

if I do:

date = <some_date>
reduce = Time.where(:date => date)
hour_on_date = reduce.collect {|x| x.hour}

Now I just need to figure out how to make <some_date> a hash key which
triggers the hour_on_date array value.

On Feb 11, 8:50 pm, Everaldo Gomes <everaldo.go...@gmail.com> wrote:
> Hi!
>
> Take a look at:
>
> http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-group_by
>
> and
>
> http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-collect
>
> I think they could help.
>
> E.g:
>
> hash = Time.all.collect { |t| [ t.date  , t.hour ] }.group_by { |date,hour|
> date.strftime("%-m/%-d/%Y") }
>
> I hope it works.
>
> Regards,
> Everaldo
>

Colin Law

unread,
Feb 13, 2012, 4:24:33 AM2/13/12
to rubyonra...@googlegroups.com
On 13 February 2012 07:00, edward michaels <mica...@gmail.com> wrote:
> Thanks, your idea did help.
>
> if I do:
>
> date = <some_date>
> reduce = Time.where(:date => date)

I think you might run into trouble using a class Time as this is
already a ruby class.

Colin

Reply all
Reply to author
Forward
0 new messages