如何在rails中将数据库列从integer迁移到bigint?

时间:2015-10-20 00:29:39

标签: ruby-on-rails-4 activerecord

根据我发现的情况,我现在正在使用此功能,但它无效......

def change
 change_column :users, :twitter_id, :integer, :limit => 8
end

2 个答案:

答案 0 :(得分:15)

我刚遇到同样的问题。以下对我有用:

def up 
  change_column :my_table, :my_column, :bigint
end

答案 1 :(得分:1)

根据ActiveRecord type of integer (tinyint, smallint, mediumint, int, bigint) :bigint不同的数据类型的任何人,也可以使用:tinyint:smallint:mediumint >

# activerecord-3.0.0/lib/active_record/connection_adapters/mysql_adapter.rb
# Maps logical Rails types to MySQL-specific data types.
def type_to_sql(type, limit = nil, precision = nil, scale = nil)
  return super unless type.to_s == 'integer'

  case limit
  when 1; 'tinyint'
  when 2; 'smallint'
  when 3; 'mediumint'
  when nil, 4, 11; 'int(11)'  # compatibility with MySQL default
  when 5..8; 'bigint'
  else raise(ActiveRecordError, "No integer type has byte size #{limit}")
  end
end

另外,请对up使用downrails db:rollback;这对我有用:

class ChangeCarNumberOfKeysToSmallInt < ActiveRecord::Migration[5.2]
  def up
    change_column :cars, :number_of_keys, :tinyint
  end

  def down
    change_column :cars, :number_of_keys, :int
  end
end