Почему временные метки создаются при создании модели

rails generate model User email:string password:string

создает следующую миграцию script

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.string :email
      t.string :password
      t.timestamps
    end
  end
  def self.down
    drop_table :users
  end
end

Что такое метки времени и почему она создается, когда я не просил ее создавать?

Ответ 1

Rails автоматически добавляет два столбца, created_at и updated_at к вашей модели table/migration/ActiveRecord. Если вы не хотите их, вы можете удалить их.

Выполнение автоматически для вас того, что вы "не спрашивали об этом", - это то, на что хорошо работает Rails: это "соглашение по конфигурации (CoC)". Вы можете (почти) всегда указывать, что хотите что-то еще, но в целом Rails будет делать так, как этого хотят большинство пользователей.

Созданные и обновленные временные метки, как правило, очень полезны.

Ответ 2

Этот вопрос возник в поиске "генерации модели рельсов без временных меток", поэтому я хотел добавить ответ о том, как это сделать:

rails g model MyModel --no-timestamps

Это работает в Rails 3.2 +.

Ответ 3

timestamps - это метод миграции, который создаст два столбца в соответствующей таблице вашей модели

Ex: согласно вашему примеру

модуль - Пользователь table - пользователи

а в таблице пользователей он создаст два столбца времени

  • created_at
  • updated_at

эти столбцы будут автоматически обновляться при создании объекта или при редактировании объекта (в данном случае модели пользователя). (при выполнении любых действий с помощью модели ActiveRecord)

Это полезно при исследовании созданных/обновленных записей.

Если вы не хотите иметь эти столбцы, просто удалите метод timestamps из вашей миграции

НТН

Sameera

Ответ 4

Я использую Rails 4.2.5, и теперь вы можете выбрать, хотите ли вы или нет полей timestamps.

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :name
      t.text :description

      t.timestamps null: false
    end
  end
end

Вышеупомянутая миграция создаст таблицу с именем create_products с двумя полями timestamps (created_at и updated_at). Если вам не нужны эти поля, вам нужно удалить строку временных меток.

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :name
      t.text :description
    end
  end
end

Источник: http://edgeguides.rubyonrails.org/active_record_migrations.html