编写将datetime null:false转换为true的数据库迁移

时间:2012-10-26 07:19:32

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

我正在尝试编写一个数据库迁移,它将我的连接表中的datetime字段从null更改为true,但某些内容无法正常工作。这是我的代码:

class ChangeDateColumnsInCirclesUsers < ActiveRecord::Migration
  def change
    change_column :circles_users, :created_at, :datetime, :null => true
    change_column :circles_users, :updated_at, :datetime, :null => true
  end
end

这不起作用。如何将这些空值设置为true而不是false?

2 个答案:

答案 0 :(得分:0)

你想用这个来完成什么?

日期时间列的默认值不能为true。

阅读规范:Migrations


Rails不支持迁移脚本中的动态默认值。因此,如果您想要当前时间,可以在模型级别轻松添加它们。

1)使用after_initialize回调

设置默认值
class Test
  def after_initialize
    self.day ||= Date.today if new_record?
  end
end

t = Test.new
t.day # will return today's date
t.save
t.day # will return today's date

修改

在评论中,我们发现您不想担心填写updated_atcreated_at,ActiveRecord已经为您做了这件事。

因此您不必删除或更改这些列。

“还会添加Active Record自动填充的时间戳列created_at和updated_at。”来自Migrations

希望它有所帮助!

答案 1 :(得分:0)

试试这个

change_column :table_name, :created_at, :datetime, :null => true, :default => nil

并运行迁移