Rails如何分配created_at?从理论上讲,它可以在Ruby层或SQL层完成。
我问这个是因为我希望它在SQL层完成。这有助于确定几个记录中的一些竞争条件。如果它来自SQL层,我可以相信这些标记表示它实际上在数据库中最终可供其他人查看的时间。
答案 0 :(得分:3)
已在ActiveRecord
Timestamp
模块中完成,此处:
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/timestamp.rb:
def _create_record
if self.record_timestamps
current_time = current_time_from_proper_timezone
all_timestamp_attributes.each do |column|
column = column.to_s
if has_attribute?(column) && !attribute_present?(column)
write_attribute(column, current_time)
end
end
end
super
end
def _update_record(*args, touch: true, **options)
if touch && should_record_timestamps?
current_time = current_time_from_proper_timezone
timestamp_attributes_for_update_in_model.each do |column|
column = column.to_s
next if attribute_changed?(column)
write_attribute(column, current_time)
end
end
super(*args)
end