Joc*_*lyn 2 macros timestamp ruby-on-rails rails-activerecord
在Rails应用程序,活动记录创建created_at和updated_at列谢宏,(它似乎也被称为“魔法列”)。
我对这个机制有一些疑问:
deleted_at)?t.publishing,将创建publish_up和publish_down列,例如?显然,我知道我可以手动添加这些列,但我想知道如何使用宏来实现它。
4. 在 Rails 上工作
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
Run Code Online (Sandbox Code Playgroud)
基本上,你可以用这种方式(在你的初始值设定项中的某处)进行monkeypatch:
class ActiveRecord::ConnectionsAdapters::TableDefinition::Table
def timestamps
@base.add_timestamps(@table_name)
@base.add_column(@table_name, :deleted_at, :datetime)
end
end
Run Code Online (Sandbox Code Playgroud)
这同样适用于创建一个新的宏:
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
Run Code Online (Sandbox Code Playgroud)
之后,您应该能够执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
查看github 上的类源代码以获得更多见解。