Как создать столбец типа tinyint(2) или tinyint(3) в Ruby on Rails?
В Ruby on Rails следующий код в миграции создает столбец типа tinyint(4)
в MySQL:
create_table :great_table do |t|
t.integer :step_position, :limit => 1 #tinyint
end
Как бы я создать столбец типа tinyint(2)
или же tinyint(3)
?
4 ответа
Для миниатюр (2)
create_table :great_table do |t|
t.integer :step_position, :limit => 2
end
Для миниатюр (3)
create_table :great_table do |t|
t.integer :step_position, :limit => 3
end
Согласно тому, что я могу видеть в исходном коде драгоценного камня, вы не можете:
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 540
540: def type_to_sql(type, limit = nil, precision = nil, scale = nil)
541: return super unless type.to_s == 'integer'
542:
543: case limit
544: when 1; 'tinyint'
545: when 2; 'smallint'
546: when 3; 'mediumint'
547: when nil, 4, 11; 'int(11)' # compatibility with MySQL default
548: when 5..8; 'bigint'
549: else raise(ActiveRecordError, "No integer type has byte size #{limit}")
550: end
551: end
Там нет такого понятия, как tinyint(4)
в MySQL в первую очередь. tinyint
однобайтовое целое число со знаком Вы можете проверить все целочисленные типы в документах. Вы можете увидеть что-то вроде tinyint(1)
даже в исходном коде Rails, но я думаю, что это тавтология как tinyint
уже подразумевает одно байтовое хранилище.
Rails способ объявить TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
в миграции с помощью limit:
с соответствующим размером байта, как видно из исходного кода.
Помните, что Rails по умолчанию будет воспринимать однобайтовые целые числа как булевы, как видно из приведенной выше ссылки.
Ты можешь использовать :tinyint
as the column type in a rails migration, and write limit: 2
или же limit: 3
as written before.
Используя ваш пример:
create_table :great_table do |t|
t.tinyint :step_position, :limit => 1
end
должно сработать.