Rails 3不会将时间部分保存在datetime字段中

时间:2011-06-10 21:14:31

标签: ruby-on-rails database datetime

我注意到我的rails 3应用程序正在保存日期时间字段,而时间部分只是日期。我使用mysql。

我的迁移是这样的:

class CreateCampaigns < ActiveRecord::Migration
   def self.up
   create_table :campaigns do |t|
      t.string :name
      t.string :subject
      t.string :from_name
      t.string :from_email
      t.string :reply_to
      t.string :location
      t.datetime :send_in_date_time
      t.string :message
      t.string :test_email
      t.boolean :send_now
      t.timestamps
    end
  end

  def self.down
    drop_table :campaigns
  end
end

假设我创建了一个新广告系列并设置了字段send_in_date_time

campaign = Campaign.new
campaign.send_in_date_time = Time.now
campaign.save

在数据库中存储此:

2011-09-20 00:00:00

create_at和modified_at也不存储时间。我测试了数据库并且工作正常,它存储了正确的时间。

编辑:

检查日志我发现活动记录正在设置没有时间的日期。 Active Record不支持日期时间吗?

UPDATE `campaigns` SET `updated_at` = '2011-06-10', `send_in_date_time` = '2011-09-19' WHERE `campaigns`.`id` = 1

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。

问题是我在初始化程序中添加了日期格式的旧代码。看起来这个代码产生了问题。

file:date_format.rb 含量:

Time::DATE_FORMATS[:month_and_year] = "%B %Y"
Time::DATE_FORMATS[:note] = lambda { |time| time.strftime("%a, %b %e at %l:%M") + time.strftime("%p").downcase }
Time::DATE_FORMATS[:db] = lambda { |time| time.strftime("%Y-%m-%d")}
Time::DATE_FORMATS[:nice] = lambda { |time| time.strftime("%b %e, %Y")}

我删除了此代码,一切正常