我正在编写Rails迁移来创建表:
create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table|
table.timestamps
table.string :country_tld
end
Run Code Online (Sandbox Code Playgroud)
这导致下表:
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'
Run Code Online (Sandbox Code Playgroud)
可悲的是,我的外国数据源使用旧式Rails updated_on和created_on列作为其时间戳.当然,我可以解决这个问题:
create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table|
table.datetime :created_on, :updated_on
table.string :country_tld
end
Run Code Online (Sandbox Code Playgroud)
如果仍然有一种琐碎的方式来使用时间戳并获得我想要的行为,我很乐意听到它.不,我不认为猴子修补ActiveRecord::Timestamp是一种琐碎的方式,考虑到这只会影响一次迁移.;)
我不完全确定你的问题在这里?ActiveRecord :: Timestamp将使用created_on与版本updated_on相同的和列_at(参见第84和88行).
顺便说一句,您无需循环遍历数组以在单行中生成日期时间.请改用:
table.datetime :created_on, :updated_on
Run Code Online (Sandbox Code Playgroud)
导轨源timestamps是:
def add_timestamps(table_name)
add_column table_name, :created_at, :datetime
add_column table_name, :updated_at, :datetime
end
Run Code Online (Sandbox Code Playgroud)
所以你可以看到没有办法自定义列名.说实话,最好的方法是你建议的那个.我个人避免这样的事情:
%w{created_on updated_on}.each {|col| table.datetime col.to_sym }
Run Code Online (Sandbox Code Playgroud)
只要写出实际的add_column命令,它就会更容易阅读.
| 归档时间: |
|
| 查看次数: |
13742 次 |
| 最近记录: |