我需要將我的列 "start_time "從時間改為資料時間。 (我認為datetime和timestamp是同一回事,這一點對嗎?注意:我在postgres上)
class ChangeStartTimeToBeDatetimeInAssignments < ActiveRecord::Migration[5.0]_span>
def up
change_column :assignments, :start_time, :datetime.
end[/span].
def down
change_column:assignments, :start_time, :time
end[/span].
end end
該列中的資料很重要,所以不能被洗掉......
注意:這里是json輸出的一個片段,只顯示 "start_time "部分(如果它重要的話)
"start_time":"2000-01-01T12:00:00"
當我遷移時出現了這個錯誤:
PG::資料型別不匹配。ERROR: 列"start_time"不能自動鑄成不帶時區的時間戳型別
提示:你可能需要來指定"USING start_time::timestamp without time zone"。
運行這個遷移...
class ChangeStartTimeToBeDatetimeInAssignments < ActiveRecord::Migration[5.0]/span>
def up
change_column :assignments, :start_time, :datetime, 'USING start_time::timestamp without time zone'
結束。
def down
change_column:assignments, :start_time, :time
end[/span].
end end
出現這個錯誤...
== 20210916230930 ChangeStartTimeToBeDatetimeInAssignments: migration =========
-- change_column(:assignments, :start_time, :datetime, "USING start_time::timestamp without time zone" )
rake中止了!
StandardError:發生了一個錯誤,這個和所有后來的遷移被取消。
沒有隱式轉換of符號into Integer。
我做錯了什么?
我如何將 "時間 "遷移到 "資料時間"?
我如何修改我的遷移并按照建議添加 "USING start_time::timestamp without time zone"?
(我認為datetime和timestamp是一回事,這一點對嗎?)
謝謝你的時間。
uj5u.com熱心網友回復:
為了可讀性,只要把所有的東西都一步一步地做出來。這也將有助于定義一個適當的下降方法,以確保回滾不會出錯。
class ChangeStartTimeToBeDatetimeInAssignments < ActiveRecord::Migration[5.0]_span>
def up
#添加一個臨時列
add_column :assignments, :start_time_datetime, :datetime
# 將當前的start_time作為日期時間添加到每個條目的臨時列中。
Assignment.all.each do |assignment|
assignment.update(start_time_datetime: assignment.start_time.to_datetime)
end
# 移除舊的時間列。
remove_column :assignments, :start_time.
# 重命名臨時列為start_time。
rename_column :assignments, :start_time_datetime, :start_time
end[/span].
def down
add_column :assignments, :start_time_time, :time.
Assignment.all.each do |assignment| >。
assignment.update(start_time_time: assignment.start_time.to_time
結束。
remove_column :assignments, :start_time.
rename_column :assignments, :start_time_time, :start_time
end[/span].
end end
為了確保更新回圈不會因為資料不一致而出錯,給你留下一半混亂的資料,你可以將更新部分包入一個https://api.rubyonrails.org/v6.1.4/classes/ActiveRecord/Transactions/ClassMethods.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322767.html
標籤:
