Rails: миграция для создания столбца char (12) фиксированной длины - PullRequest
30 голосов
/ 04 апреля 2011

Каков наилучший способ определения столбца SQL фиксированной длины (например, CHAR (12)) с помощью миграции Rails?

Почему это не должно обрабатываться моделью из-за производительности char() против varchar (), и я бы хотел избежать внедрения необработанного SQL в базу данных.

Редактировать: я знаю модификатор: limit, однако поле все еще varchar (что плохо для производительности) ине допускает минимальный размер.

Ответы [ 4 ]

49 голосов
/ 06 мая 2011

Если Rails не понимает тип столбца, он сразу передаст его в базу данных. Так что если вы хотите использовать char вместо varchar, просто замените:

t.column :token, :string

С:

t.column :token, "char(12)"

Конечно, это может или не может сделать ваши миграции непереносимыми в другую базу данных.

(кредит до http://laurelfan.com/2010/1/26/special-mysql-types-in-rails-migrations)

26 голосов
/ 04 апреля 2011
 def self.up
    add_column("admin_users", "username", :string, :limit => 25)
 end

 def self.down
    remove_column("admin_users", "username")
 end
8 голосов
/ 04 апреля 2011

Вы можете использовать строковый тип с параметром limit в вашем файле миграции следующим образом:

t.string :name, :limit => 12, :null => false
6 голосов
/ 20 ноября 2014

Для конкретного типа базы данных теперь мы можем использовать:

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
...