mysql - rails 3 : How to solve an inconsistency in date format in development and production environments?

标签 mysql ruby-on-rails ruby-on-rails-3 date date-format

我的 Job 模型具有在迁移文件中定义的 job_date 字段,如下所示:

create_table :jobs do |t|
  t.date "job_date", :null => false
  [...]
end

在我的开发环境(Windows 上)中,当我这样做时:

job = Job.new(:job_date => "17/04/2011")

一切正常(即job_date设置正确),而当我这样做时:

job = Job.new(:job_date => "04/17/2011")

job_date 设置为 nil

我猜这是因为数据库(MySQL)期望以DD/MM/YYYY格式获取日期。

问题是在我的生产环境中,发生了完全相反的情况,即:

job = Job.new(:job_date => "04/17/2011")

正确设置“job_date”,同时:

job = Job.new(:job_date => "17/04/2011")

将其设置为nil

如何解决这种不一致问题?

是否有某种方法可以将数据库配置为特定日期格式(例如DD/MM/YYYY)?

最佳答案

这不是数据库问题,但我认为这是 Ruby 中 Date.parse 方法的问题。事实上,当您调用 Job.new 时,它不会保存到数据库,只会创建模型的新对象。我相信 Rails 调用 Date.parse 方法将字符串转换为日期对象,它在我的机器中给出了 dd/mm/yyyy 格式的错误

Date.parse("17/04/2011")
=> ArgumentError: invalid date
    from /usr/lib/ruby/1.8/date.rb:956:in `new_by_frags'
    from /usr/lib/ruby/1.8/date.rb:1000:in `parse'
    from (irb):3

我认为 Rails 会避免此错误,并为此类值提供 nil

job = Job.new(:job_date => "17/04/2011")
job.job_date
=> nil

job = Job.new(:job_date => "04/17/2011")
job.job_date
=> Sun, 17 Apr 2011

我猜你的生产环境的结果与我的机器和你的开发机器的 Ruby 相同,Date.parse 可能适用于其他格式。

如果您只需要处理一种格式(dd/mm/yyyymm/dd/yyyy),您可以使用 Date.strptime 在提供给数据库之前计算日期

job_date = Date.strptime("17/04/2011", "%d/%m/%Y") # or "%m/%d/%Y"
job = Job.new(:job_date => job_date)

这对于一种格式在您的生产和开发环境中都适用。

关于mysql - rails 3 : How to solve an inconsistency in date format in development and production environments?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5431154/

相关文章:

php - 在mysql和PHP中检查一个字段是否有属性 `UNIQUE`

mysql 加入电话 加入客户端 pissible 电话

javascript - 在Rails中,如何调用AJAX函数并在完成后刷新页面?

ruby-on-rails - 使用 Jruby/Rails 实现 Google 的 hashbang/Ajax 爬网?

ruby-on-rails - 错误无法加载此类文件 -- user_agent/browsers/playstation (LoadError)

php - 自定义 preg_replace 函数的任何更有效的方法?

mysql - 使用Mysql将UTC 12小时时间格式转换为印度时间

ruby-on-rails - Rails_admin,根据关联更改枚举字段的值

jquery - 用于用户帖子的 Rails ajax fav 按钮

ruby-on-rails-3 - 如何保存 1 个对象的多个翻译而不使用 Globalize 重置 I18n.locale?