简体   繁体   中英

PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: “M”

So I have a gender column on my user model and it's currently a string, I'd like to change it to a integer and make Male '1', and Female '0' as it's presently Male "M" Female "F". When running this migration:

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

I get the following error:

error message:

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'

What should I do to properly change gender to integer?

Thanks in advance!

You need to first convert the values M to 1 and F to 0 and then change the column type.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM