ActiveRecord::ConnectionsAdapters::TableDefinition::Table
類負責所有的高級別遷移的東西像column
,index
,index_exists?
等。它有timestamps
方法,增加了created_at
和updated_at
欄目爲您提供:
# Adds timestamps (+created_at+ and +updated_at+) columns to the table.
# See SchemaStatements#add_timestamps
# t.timestamps
def timestamps
@base.add_timestamps(@table_name)
end
基本上,你可以(在你的初始化某處)這樣猴補丁吧:
class ActiveRecord::ConnectionsAdapters::TableDefinition::Table
def timestamps
@base.add_timestamps(@table_name)
@base.add_column(@table_name, :deleted_at, :datetime)
end
end
這同樣適用於創建一個新的宏:
class ActiveRecord::ConnectionsAdapters::TableDefinition::Table
def publishing
@base.add_column(@table_name, :publish_up, :datetime)
@base.add_column(@table_name, :publish_down, :datetime)
end
end
之後,你應該能夠做這些事情:
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.string :first_name
t.string :last_name
t.timestamps
t.publishing
end
end
def self.down
drop_table :users
end
end
查看github上的類source code瞭解更多見解。
謝謝你的幫助。我通過monkeypatching TableDefinition類來工作https://gist.github.com/jocelynduc/3a34478ed3e7da3a0dcb – Jocelyn