簡體   English   中英

Rails將schema.rb時間戳更改為日期時間

[英]Rails changes schema.rb timestamps to datetimes

與其他開發人員合作時,這個問題似乎一直在發生。 我們有一個像這樣的遷移創建的表(由postgres支持):

create_table :subscription_events do |t|
  t.integer :subscriber_id
  t.text :source_url
  t.text :params
  t.text :session

  t.timestamps
end

然后在運行rake db:migrate之后的未來看似隨機的時間點,Rails想要更新schema.rb文件以使用datetime而不是timestamp ,從而導致整個create_table調用的另外令人困惑的重新注冊:

   create_table "subscription_events", :force => true do |t|
-    t.integer   "subscriber_id"
-    t.text      "source_url"
-    t.text      "params"
-    t.text      "session"
-    t.timestamp "created_at",    :limit => 6, :null => false
-    t.timestamp "updated_at",    :limit => 6, :null => false
+    t.integer  "subscriber_id"
+    t.text     "source_url"
+    t.text     "params"
+    t.text     "session"
+    t.datetime "created_at",    :null => false
+    t.datetime "updated_at",    :null => false
   end

是什么造成的? 我們應該檢查這個修改過的文件還是每次都重置它?

這不應該導致任何“重新索引”,因為:datetime:timestamp遷移類型都映射到PostgreSQL的TIMESTAMP數據類型。

這可能是由於固有無序的ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES常量導致的,該常量被定義為標准哈希。 當ActiveRecord搜索'TIMESTAMP'的第一個合適匹配時,它可能會發現:datetime:timestamp不可預測(因為兩者都匹配)。

簡而言之,不要大驚小怪,因為這不應該影響您的數據或架構。

UPDATE

轉儲中使用的rails'數據類型'是使用simplified_type方法找到的,該方法將返回:datetime TIMESTAMP數據類型的:datetime 更有可能的是,您已升級了Rails版本,其中先前版本具有用於確定數據類型的不同方法。 不管是什么原因,這不應該以任何方式影響你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM