0
我正嘗試更新遷移中設置的新列的某些默認值。但是,每當我嘗試對用戶表的記錄執行任何操作時(除了修改其結構),我都會收到Postgres錯誤。我使用Rails 3.0.7,1.9.2紅寶石和PG寶石版本0.11.0與Postgresql運行鍼對用戶表的遷移問題
這裏是遷移:
def self.up
add_column :users, :state_machine, :string
add_column :users, :wizard_steps_completed, :integer, :default => "1"
add_column :users, :activated_at, :datetime
User.reset_column_information
User.all.each do |u|
u.update_attributes(:state_machine => "activated", :wizard_steps_completed => 3, :activated_at => u.created_at)
end
end
的列添加,沒有任何問題。然而,改變現有的記錄全部失敗,出現以下錯誤:
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
== AddUserSignupInfo: migrating ==============================================
rake aborted!
An error has occurred, this and all later migrations canceled:
PGError: ERROR: current transaction is aborted, commands ignored until end of transaction block
: SELECT COUNT(*)
FROM pg_tables
WHERE tablename = 'users'
如果我嘗試更新任何orecord它似乎工作,我只能做結構上的改變......
任何想法?
你的User類是否對你的新屬性做了一些有趣的事情? – 2011-05-06 01:02:14
不,只是香草。 爲了簡化起見,我將更新移到了他們自己的遷移中,並更新爲使用update_all只是爲了使其理論上成爲一個事務。 它在控制檯中工作。 – 2011-05-06 01:13:18
我猜想某個地方會觸發數據庫中的錯誤,然後捕獲並更正它(例如,INSERT,違反唯一約束,捕獲異常,改爲執行UPDATE),但是會破壞'db:migrate'事務。如果分兩步進行操作,那麼我會繼續努力,繼續進行更有趣的事情。 – 2011-05-06 02:42:08