在 Rails 中,将字符串从 date_select 转换为日期

In Rails, Convert string from date_select to Date

我有这样的字符串:

{2=>1, 3=>1, 1=>2008}

它是从这样的 select 字段生成的:

<%= user_record.date_select :response, {
                            order: [:month, :day, :year], 
                            prompt: { 
                              day: 'Select day', 
                              month: 'Select month', 
                              year: 'Select year' 
                            }, 
                            start_year: Date.today.year - 12, 
                            end_year: Date.today.year - 110
                          } %>

并作为字符串存储在数据库中。 (我无法将其更改为日期类型,因为它是用户生成的内容)。

这会导致 2 个问题: 我想在“显示”视图中显示日期的人性化版本。现在它看起来像 {2=>1, 3=>1, 1=>2008}

我想在“编辑视图”表单域中显示日期 select 输入。现在它出错了

undefined method `year' for "{2=>1, 3=>1, 1=>2008}":String

我试过拆分字符串和剥离字符,但是 Ruby 中有更好的解决方案吗?

您可以将客户 setter 和 getter 方法添加到您的模型,以在来自视图的传入哈希和字符串类型数据库列之间进行转换。

类似这样的方法可能有效:

def response
  Date.parse(super)
end

def response=(value)
  value = Date.new(value[1], value[2], value[3]) if value.is_a?(Hash)

  super(value.to_s)
end