2013-12-21 74 views
2

所以我在我的用戶模型上有一個性別列,它現在是一個字符串,我想將其更改爲一個整數並使男性'1 '和女性'0',因爲它現在是男性「M」女性「F」。當運行這個遷移:PG :: InvalidTextRepresentation:錯誤:整數的無效輸入語法:「M」

class ChangeGenderToIntegerOnUser < ActiveRecord::Migration 
    def change 
    change_column :users, :gender, 'integer USING CAST(gender AS integer)' 
    end 
end 

我得到以下錯誤:

錯誤消息:

PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: "M" 
: ALTER TABLE "users" ALTER COLUMN "gender" TYPE integer USING CAST(gender AS integer)/usr/local/rvm/gems/ruby-2.0.0-p247/gems/activerecord-4.0.0.rc1/lib/active_record/connection_adapters/postgresql/database_statements.rb:128:in `exec' 

我應該怎麼做適當改變性別爲整數?

感謝先進!

回答

8

您需要先將值M轉換爲1並將F轉換爲0,然後更改列類型。

class ChangeGenderToIntegerOnUser < ActiveRecord::Migration 
    def change 
    User.where(gender: 'M').update_all(gender: 1) 
    User.where(gender: 'F').update_all(gender: 0) 
    change_column :users, :gender, 'integer USING CAST(gender AS integer)' 
    end 
end 
相關問題