Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to convert a hash value returned from a date_select in rails to a Date object?

I have a date_select in my view inside a form, however on submit the value returned is in a hash form like so:

{"(1i)"=>"2010", "(2i)"=>"8", "(3i)"=>"16"}

how can i convert that in to a Date format in rails so i can use it as a condition when querying the database e.g :condition => {:dates == :some_date_from_date_select}? i tried calling Date.parse(:some_date_from_date_select) but it didn't work because its expecting a string and not a hash map.

is there a rails way to do this?

thanks

like image 360
Mo. Avatar asked Aug 17 '10 09:08

Mo.


2 Answers

I don't know about a rails way, but this "one-liner" does the trick:

irb(main):036:0> d = Date.parse( {"(1i)"=>"2010", "(2i)"=>"8", "(3i)"=>"16"}.to_a.sort.collect{|c| c[1]}.join("-") )
=> #<Date: 4910849/2,0,2299161>
irb(main):037:0> d.to_s
=> "2010-08-16"

Or, with less magic:

h={"(1i)"=>"2010", "(2i)"=>"8", "(3i)"=>"16"}
d=Date.new(h['(1i)'].to_i, h['(2i)'].to_i, h['(3i)'].to_i)
d.to_s
=> "2010-08-16"
like image 134
ngoozeff Avatar answered Oct 01 '22 16:10

ngoozeff


I have a short one line solution for this

params["due_date"] = {"date(3i)"=>"14", "date(2i)"=>"4", "date(1i)"=>"2014"}


params["due_date"].map{|k,v| v}.join("-").to_date
=> Mon, 14 Apr 2014
like image 33
harrya Avatar answered Oct 01 '22 14:10

harrya