Rails 2.0.2
Used to seeing this in your generated migrations?
class CreateModel < ActiveRecord::Migration
def self.up
create_table :models do |t|
...
t.timestamps
end
...
timestamps is a method found in ActiveRecord::ConnectionAdapters::TableDefinition that adds two attributes, created_at and changed_at, to the table schema. If you have similar groups of attributes that are repeated in multiple tables then you can add your own methods to provide the effect of timestamps such as:
class CreateModel < ActiveRecord::Migration
def self.up
create_table :models do |t|
...
t.audit_fields
end
...
Files placed in config/initializers are always loaded whenever Rails is so that is where I would place the following file, but you can place it anywhere in the load path (lib is a good choice) and simply require it by name in the migration file itself.
The code for the audit_fields method above looks like this:
# Put this in config/initializers as active_record_addins.rb
module ActiveRecord
module ConnectionAdapters
class TableDefinition
# Record access data
def access_audit_fields
column :accessed_at, :datetime, :null => false
column :accessed_by, :string, :null => false
column :accessed_from, :string, :null => false
end
def all_audit_fields
access_audit_fields
data_audit_fields
end
def audit_fields
data_audit_fields
end
# Record creation and modification data
def data_audit_fields
column :changed_at, :datetime, :null => false
column :changed_by, :string, :null => false
column :created_at, :datetime, :null => false
column :created_by, :string, :null => false
end
# Record effective duration data
def duration_fields
column :effective_from, :datetime, :null => false
column :superseded_after, :datetime, :null => true
end
# For those that forget the default setting!
def lock_field
column :lock_version, :integer,
:null => false, :default => 0
end
end
end
end
In this scheme, the method _audit_fields_ is an alias for _data_audit_fields_, the method that actually adds the columns. Method _all_audit_fields_ demonstrates the means by which one may separate groups of special purpose columns and yet still aggregate them for convenience.
Rails 2.0.2
Used to seeing this in your generated migrations?
class CreateModel < ActiveRecord::Migration
def self.up
create_table :models do |t|
...
t.timestamps
end
...
timestamps is a method found in ActiveRecord::ConnectionAdapters::TableDefinition that adds two attributes, created_at and changed_at, to the table schema. If you have similar groups of attributes that are repeated in multiple tables then you can add your own methods to provide the effect of timestamps such as:
class CreateModel < ActiveRecord::Migration
def self.up
create_table :models do |t|
...
t.audit_fields
end
...
Files placed in config/initializers are always loaded whenever Rails is so that is where I would place the following file, but you can place it anywhere in the load path (lib is a good choice) and simply require it by name in the migration file itself.
The code for the audit_fields method above looks like this:
# Put this in config/initializers as active_record_addins.rb
module ActiveRecord
module ConnectionAdapters
class TableDefinition
# Record access data
def access_audit_fields
column :accessed_at, :datetime, :null => false
column :accessed_by, :string, :null => false
column :accessed_from, :string, :null => false
end
def all_audit_fields
access_audit_fields
data_audit_fields
end
def audit_fields
data_audit_fields
end
# Record creation and modification data
def data_audit_fields
column :changed_at, :datetime, :null => false
column :changed_by, :string, :null => false
column :created_at, :datetime, :null => false
column :created_by, :string, :null => false
end
# Record effective duration data
def duration_fields
column :effective_from, :datetime, :null => false
column :superseded_after, :datetime, :null => true
end
# For those that forget the default setting!
def lock_field
column :lock_version, :integer,
:null => false, :default => 0
end
end
end
end
In this scheme, the method _audit_fields_ is an alias for _data_audit_fields_, the method that actually adds the columns. Method _all_audit_fields_ demonstrates the means by which one may separate groups of special purpose columns and yet still aggregate them for convenience.