gpt4 book ai didi

ruby-on-rails - 哈希不是将日期保存为值吗?

转载 作者:数据小太阳 更新时间:2023-10-29 08:47:47 24 4
gpt4 key购买 nike

我在 Ruby 1.8.7 和 Rails 2.3.8 中有一个哈希:

   important_dates = params[:important_dates]
important_dates =#>
{"third_test"=>"July 11, 2014", "fourth_test"=>"August 08, 2014", "second_test"=>"June 13, 2014", "sixth_test"=>"August 05, 2014"}

日期来自 Rails 中的 calendar_select_date_tag,我将一个日期对象传递给它,但在参数中,当我尝试这样做时,我总是得到一个字符串:

    new_dates = important_dates.each_value{|r| r.to_date}        
new_dates[:fourth_test].class.inspect #=> String

我已经研究这个几个小时了。

最佳答案

new_dates = Hash[important_dates.map{|k,v| [k, v.to_date]}]

或者,如果您使用的是 Ruby 2.0 或更高版本:

new_dates = important_dates.map{|k,v| [k, v.to_date]}.to_h

更新:为什么您的答案不起作用:

each_value 总是返回它迭代的初始散列,并丢弃 block 返回值。注意,例如:

h = {a: 'foo', b: 'bar'}
h.each_value {|v| v.upcase } #=> upcase creates a new string object
h #=> {a: 'foo', b: 'bar'}

但是,如果该值是可变的,您可以尝试在迭代期间更改它:

h = {a: 'foo', b: 'bar'}
h.each_value {|v| v.upcase! } #=> upcase! alters existing string object
h #=> {a: 'FOO', b: 'BAR'}

new_dates = important_dates.each_value{|r| r.to_date

但是由于您想将字符串对象更改为日期对象,因此绝对没有办法使用 each_value 来完成此操作。

关于ruby-on-rails - 哈希不是将日期保存为值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22306135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com