如何在将日期保存到 Rails 4 中的数据库之前转换日期?

oob*_*e11 1 ruby-on-rails ruby-on-rails-4

我试图使用引导程序日期选择器在我的模型之一上设置日期字段。我想在用户选择日期后将其格式化为 MM/DD/YYYY。问题是这个日期格式对我的数据库(YYYY/MM/DD)不正确,我需要在保存之前对其进行格式化。

在我的模型中,我创建了一个 setter 方法

def start_date=(val)
   Date.strptime(val, '%Y-%m-%d')
end
Run Code Online (Sandbox Code Playgroud)

当我在表单中输入日期(例如 2014 年 9 月 23 日)时,我收到一条错误消息,指出日期无效。

我究竟做错了什么?

我的参数

{"utf8"=>"?",
 "authenticity_token"=>"***",
 "event"=>{"start_date"=>"09/24/2014",
 "user_id"=>"1"},
 "commit"=>"Submit"
 }
Run Code Online (Sandbox Code Playgroud)

编辑

所以在稍微改变我的方法之后

def start_date=(val)
    Date.strptime(val, "%m/%d/%Y") if val.present?
end
Run Code Online (Sandbox Code Playgroud)

我不再收到“无效日期”错误。但是,现在没有日期保存到记录中。我试过了

def start_date=(val)
    @start_date = Date.strptime(val, "%m/%d/%Y") if val.present?
  end
Run Code Online (Sandbox Code Playgroud)

正如@animatedgif 所建议的那样,但仍然没有任何反应。

oob*_*e11 6

所以我想出了最好的方法来做到这一点(我认为:P)。

我必须在我的 setter 中添加一个 write_attribute() 才能保存。

def start_date=(val)
    date = Date.strptime(val, "%m/%d/%Y") if val.present?
    write_attribute(:start_date, date)
end
Run Code Online (Sandbox Code Playgroud)

这将我的 MM/DD/YYYY 设置为 YYYY/MM/DD,然后将其保存到数据库中。