Как заставить Rails генерировать 'schema.rb' с поддержкой bigint для MySQL? - PullRequest
6 голосов
/ 16 марта 2011

Я использую Rails 3.0.5. Я использую MySQL в качестве хранилища базы данных. У меня есть модель, в которой один из столбцов должен быть BIGINT. В моем файле создания миграции используется следующее:

t.column  :my_column_name,       :bigint

, который отлично работает.

Однако, когда я бегу

rake db: migrate

сгенерированный файл schema.rb создает следующую строку для определенного столбца:

t.integer  "my_column_name",       :limit => 8

что не правильно.

Мой вопрос: где я не прав? Что-то, что я должен сделать, чтобы получить правильный файл 'schema.rb'? Могу ли я изменить способ создания файла schema.rb?

Обратите внимание, что тот факт, что файл 'schema.rb' неправильный, вызывает проблемы на моем сервере непрерывной интеграции, который запускает тесты и создает базу данных с нуля (до запуска тестов), используя файл "schema.rb".

1 Ответ

9 голосов
/ 16 марта 2011

Теперь я понимаю, что

t.integer "my_column_name", :limit => 8

с драйвером my_sql ПРАВИЛЬНО в файле schema.rb.

База данных, созданная с использованием файла schema.rb, создает

bigint(20)

хотя это может показаться странным.

Я нашел это, изучив код адаптера my_sql, фрагмент которого я цитирую здесь:

 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

Понятно, что там: limit => 8 приведет к созданию bigint в mysql db.

...