Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中,将字符串从日期转换为日期_Ruby On Rails_Ruby_String_Hash_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 在Rails中,将字符串从日期转换为日期

Ruby on rails 在Rails中,将字符串从日期转换为日期,ruby-on-rails,ruby,string,hash,ruby-on-rails-5,Ruby On Rails,Ruby,String,Hash,Ruby On Rails 5,我有这样一个字符串: {2=>1, 3=>1, 1=>2008} <%= user_record.date_select :response, { order: [:month, :day, :year], prompt: { day: 'Select day',

我有这样一个字符串:

{2=>1, 3=>1, 1=>2008}
<%= 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=>1, 3=>1, 1=>2008}
<%= 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
                          } %>

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

您可以向模型中添加customer 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

您是否考虑过将散列包装在PORO中(如在presenter和/或decorator模式中)?我相信getter在这里不起作用,您需要将保存在数据库中的字符串(“{2=>1,3=>1,1=>2008}”)转换为可读且可解析的日期格式。当然,当生产数据库中已经有无效记录时,它们也需要清理。不确定情况是否如此,或者OP是否已经注意到开发中的问题。