Use of DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP is specific to TIMESTAMP. The DEFAULT clause also can be used to specify a constant (nonautomatic) default value; for example, DEFAULT 0 or DEFAULT '2000-01-01 00:00:00'.
TIMESTAMP Initialization and the NULL AttributeDEFAULT NULL can be used to explicitly specify NULL as the default value. (For a TIMESTAMP column not declared with the NULL attribute, DEFAULT NULL is invalid.) If a TIMESTAMP column permits NULL values, assigning NULL sets it to NULL , not to the current timestamp.
This is supported now in Rails 5.
Here is a sample migration:
class CreatePosts < ActiveRecord::Migration[5.0]
def change
create_table :posts do |t|
t.datetime :modified_at, default: -> { 'CURRENT_TIMESTAMP' }
t.timestamps
end
end
end
See discussion at https://github.com/rails/rails/issues/27077 and answer there by prathamesh-sonpatki
You can add a function in a model like this:
before_create :set_foo_to_now
def set_foo_to_now
self.foo = Time.now
end
So that the model will set the current time in the model.
You can also place some sql code in the migration for setting the default value at the database level, something like:
execute 'alter table foo alter column starts_at set default now()'
Setting something like this:
create_table :foo do |t|
t.datetime :starts_at, :null => false, :default => Time.now
end
causes executing the Time.now function during migrating so then the table in database is created like this:
create table foo ( starts_at timestamp not null default '2009-01-01 00:00:00');
but I think that it is not what you want.
If you need to change an existing DateTime column in Rails 5 (rather than creating a new table as specified in other answers) so that it can take advantage of the default date capability, you can create a migration like this:
class MakeStartsAtDefaultDateForFoo < ActiveRecord::Migration[5.0]
def change
change_column :foos, :starts_at, :datetime, default: -> { 'CURRENT_TIMESTAMP' }
end
end
Active Record automatically timestamps create and update operations if the table has fields named
created_at
/created_on
orupdated_at
/updated_on
. Source - api.rubyonrails.org
You don't need to do anything else except to have that column.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With