【问题标题】:Cannot translate date formats from rails form to mysql db无法将日期格式从 rails 表单转换为 mysql db
【发布时间】:2013-10-30 22:13:01
【问题描述】:

我在 rails 3 中有一个简单的搜索表单,它有两个日期字段。我在将这些日期输入我的 mysql 数据库时遇到问题。

我尝试使用american_date gem,在我的初始化程序、config/locales/en.yml 文件中以及直接在日期字段本身的日期上指定日期格式。目前,我正在视图中设置 Rails 批准的日期格式 -

<%= f.text_field :depart_date, :value=> Date.today.strftime('%Y-%m-%d') %>

我的数据库中的日期格式也是 YYYY-mm-dd,所以事情应该很顺利。

控制台告诉我这两个日期字段都是class = "Date"

我想我找到了断开连接。从日志 -

Started POST "/searches" for 127.0.0.1 at 2013-10-30 17:43:26 -0400
Processing by SearchesController#create as HTML
Parameters: {"utf8"=>"√","search"=>{"depart_date"=>"2013-10-30", 
"return_date"=>"2013-11-09"}
←[1m←[35m (0.0ms)←[0m  BEGIN
←[1m←[36mSQL (0.0ms)←[0m  ←[1mINSERT INTO `searches` (`depart_date`,`return_date`)
VALUES ('2013-30-10','2013-09-11')←[0m
←[1m←[35m (2.0ms)←[0m  COMMIT

请注意,月份和日期值在插入语句中切换。我怎样才能防止这种情况发生?

【问题讨论】:

  • 使用&lt;%= f.text_field :depart_date, :value=&gt; Date.today %&gt;会发生什么
  • 另一种选择是尝试Date.today.strftime('%m/%d/%Y')
  • 主要是让 Rails 为你做翻译,所以使用最小的 Rails 标准并通过 api 中的示例进行,而不是使用我从痛苦经验中学到的格式。跨度>
  • 使用:value=&gt; Date.today 将当前日期显示为“10/31/2013”​​,但仍尝试将其保存为2013-31-10。我试过Date.today.strftime('%m/%d/%Y'),但它也一样。

标签: mysql ruby-on-rails ruby-on-rails-3


【解决方案1】:

很可能您的时区设置不正确。 检查您的 MySQL 使用的是哪个时区以及 Rails 使用的是哪个时区。

您可以尝试像这样在您的 Rails 应用程序中强制设置时区

class Application < Rails::Application
  config.time_zone = 'Eastern Time (US & Canada)'
end

【讨论】:

  • 我设置了config.time_Zone = 'Eastern Time (US &amp; Canada)',还用:local试了一次,确认db实例正在使用SYSTEM时间。但是,它仍然没有正确保存日期。
【解决方案2】:

设置一个虚拟属性以在数据库中的文本字段和日期之间进行转换。你可以按照 railscasts 来让这些工作 -

#16 Virtual Attributes

#32 Time in Text Field

【讨论】:

    猜你喜欢
    • 2011-08-02
    • 2011-08-13
    • 1970-01-01
    • 2014-02-25
    • 2013-12-15
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    相关资源
    最近更新 更多