Rails: миграция для создания столбца char (12) с фиксированной длиной
Каков наилучший способ определения столбца SQL с фиксированной длиной (например, CHAR (12)) через миграцию Rails?
Почему это не должно обрабатываться моделью из-за производительности char() vs varchar(), и я хотел бы избежать ввода исходного SQL в базу данных.
Изменить: я знаю модификатор: limit, однако поле все равно varchar (что плохо для производительности) и не позволяет минимальный размер.
Ответы
Ответ 1
Если Rails не понимает тип столбца, он передает его прямо в базу данных. Поэтому, если вы хотите использовать char вместо varchar, просто замените:
t.column :token, :string
С
t.column :token, "char(12)"
Конечно, это может или не может сделать ваши миграции не переносимыми в другую базу данных.
(кредит http://laurelfan.com/2010/1/26/special-mysql-types-in-rails-migrations)
Ответ 2
def self.up
add_column("admin_users", "username", :string, :limit => 25)
end
def self.down
remove_column("admin_users", "username")
end
Ответ 3
Вы можете использовать строковый тип с параметром ограничения в файле миграции следующим образом:
t.string :name, :limit => 12, :null => false
Ответ 4
Для конкретного типа базы данных мы можем теперь использовать:
t.column(:column_name, 'char(12)')
И для полного примера:
class Foo < ActiveRecord::Migration
def change
create_table :foo do |t|
t.column(:column_name, 'custom_type')
t.timestamps
end
end
end