Module: ActiveRecord::Timestamp
| Relationships & Source Files | |
| Namespace Children | |
|
Modules:
| |
| Extension / Inclusion / Inheritance Descendants | |
|
Included In:
| |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
::ActiveSupport::Concern
|
|
| Defined in: | activerecord/lib/active_record/timestamp.rb |
Overview
========================
Active Record automatically timestamps create and update operations if the
table has fields named created_at/created_on or
updated_at/updated_on.
Timestamping can be turned off by setting:
config.active_record. = false
Timestamps are in UTC by default but you can use the local timezone by setting:
config.active_record.default_timezone = :local
Time Zone aware attributes
Active Record keeps all the datetime and time columns
timezone aware. By default, these values are stored in the database as UTC
and converted back to the current Time.zone when pulled from the database.
This feature can be turned off completely by setting:
config.active_record.time_zone_aware_attributes = false
You can also specify that only datetime columns should be time-zone
aware (while time should not) by setting:
{ActiveRecord::Base.time_zone_aware_types} = [:datetime]
You can also add database-specific timezone aware types. For example, for PostgreSQL:
{ActiveRecord::Base.time_zone_aware_types} += [:tsrange, :tstzrange]
Finally, you can indicate specific attributes of a model for which time zone conversion should not applied, for instance by setting:
class Topic < {ActiveRecord::Base}
self.skip_time_zone_conversion_for_attributes = [:written_on]
end
Class Method Summary
::ActiveSupport::Concern - Extended
| class_methods | Define class methods from given block. |
| included | Evaluate given block in context of base class, so that you can write class macros here. |
| prepended | Evaluate given block in context of base class, so that you can write class macros here. |
| append_features, prepend_features | |
Instance Attribute Summary
- #should_record_timestamps? ⇒ Boolean readonly private
Instance Method Summary
- #_create_record private
- #_update_record private
- #all_timestamp_attributes_in_model private
-
#clear_timestamp_attributes
private
Clear attributes and changed_attributes.
- #create_or_update(touch: true) private
- #current_time_from_proper_timezone private
- #init_internals private
- #max_updated_column_timestamp private
- #record_update_timestamps private
- #timestamp_attributes_for_create_in_model private
- #timestamp_attributes_for_update_in_model private
- #initialize_dup(other) Internal use only
DSL Calls
included
[ GitHub ]61 62 63
# File 'activerecord/lib/active_record/timestamp.rb', line 61
included do class_attribute :, default: true end
Instance Attribute Details
#should_record_timestamps? ⇒ Boolean (readonly, private)
[ GitHub ]
# File 'activerecord/lib/active_record/timestamp.rb', line 146
def && (!partial_updates? || has_changes_to_save?) end
Instance Method Details
#_create_record (private)
[ GitHub ]# File 'activerecord/lib/active_record/timestamp.rb', line 110
def _create_record if current_time = current_time_from_proper_timezone .each do |column| _write_attribute(column, current_time) unless _read_attribute(column) end end super end
#_update_record (private)
[ GitHub ]# File 'activerecord/lib/active_record/timestamp.rb', line 122
def _update_record super end
#all_timestamp_attributes_in_model (private)
[ GitHub ]# File 'activerecord/lib/active_record/timestamp.rb', line 158
def self.class. end
#clear_timestamp_attributes (private)
Clear attributes and changed_attributes
# File 'activerecord/lib/active_record/timestamp.rb', line 173
def .each do |attribute_name| if self[attribute_name] self[attribute_name] = nil clear_attribute_change(attribute_name) end end end
#create_or_update(touch: true) (private)
[ GitHub ]# File 'activerecord/lib/active_record/timestamp.rb', line 128
def create_or_update(touch: true, **) @_touch_record = touch super end
#current_time_from_proper_timezone (private)
[ GitHub ]# File 'activerecord/lib/active_record/timestamp.rb', line 162
def current_time_from_proper_timezone self.class.current_time_from_proper_timezone end
#init_internals (private)
[ GitHub ]# File 'activerecord/lib/active_record/timestamp.rb', line 105
def init_internals super @_touch_record = nil end
#initialize_dup(other)
# File 'activerecord/lib/active_record/timestamp.rb', line 65
def initialize_dup(other) # :nodoc: super end
#max_updated_column_timestamp (private)
[ GitHub ]# File 'activerecord/lib/active_record/timestamp.rb', line 166
def .filter_map { |attr| (v = self[attr]) && (v.is_a?(::Time) ? v : v.to_time) } .max end
#record_update_timestamps (private)
[ GitHub ]# File 'activerecord/lib/active_record/timestamp.rb', line 133
def if @_touch_record && current_time = current_time_from_proper_timezone .each do |column| next if will_save_change_to_attribute?(column) _write_attribute(column, current_time) end end yield if block_given? end
#timestamp_attributes_for_create_in_model (private)
[ GitHub ]# File 'activerecord/lib/active_record/timestamp.rb', line 150
def self.class. end
#timestamp_attributes_for_update_in_model (private)
[ GitHub ]# File 'activerecord/lib/active_record/timestamp.rb', line 154
def self.class. end