Ruby on rails Rails时间戳:updated_on/created_on与created_at/updated_at

Ruby on rails Rails时间戳:updated_on/created_on与created_at/updated_at,ruby-on-rails,Ruby On Rails,我正在编写Rails迁移以创建一个表: create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table| table.timestamps table.string :country_tld end 结果如下表所示: CREATE TABLE `sites` ( `id` int(11) NOT NULL AUTO_INCREMENT, `created_at` datetime DEFA

我正在编写Rails迁移以创建一个表:

create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table|
  table.timestamps
  table.string :country_tld
end
结果如下表所示:

CREATE TABLE `sites` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `country_tld` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://foo:bar@localhost/baz/sites'
不幸的是,我的国外数据源使用了旧式Rails
updated\u on
created\u on
列作为时间戳。当然,我可以绕过这个问题:

create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table|
  table.datetime :created_on, :updated_on
  table.string :country_tld
end

如果有一种简单的方法仍然可以使用时间戳并获得我想要的行为,我很想听听。不,我不认为这是一个琐碎的方式,考虑到这只会影响一个迁移。p> 时间戳的rails源代码是:

def add_timestamps(table_name)
  add_column table_name, :created_at, :datetime
  add_column table_name, :updated_at, :datetime
end
因此,您可以看到无法自定义列名。老实说,最好的方法就是你建议的方法。我个人避免这样的事情:

%w{created_on updated_on}.each {|col| table.datetime col.to_sym }

只需写出实际的
add_column
命令,它更详细,也更容易阅读。

我不完全确定您的问题是什么?将使用上创建的和上更新的列,与版本中的相同(参见第84行和第88行)

顺便说一句,您不需要在一个数组中循环生成一行中的日期时间。改用这个:

table.datetime :created_on, :updated_on

谢谢,我不知道您可以使用一次创建多个列。我的问题是:我可以使用
#timestamps
帮助器创建旧式列吗?