Quelle est la meilleure façon de définir une colonne SQL de longueur fixe (CHAR (12) par exemple) via une migration Rails?
Pourquoi cela ne devrait pas être géré par le modèle en raison des performances de char () vs varchar (), et j'aimerais éviter d'injecter du SQL brut dans la base de données.
Edit: je connais le modificateur: limit, mais le champ est toujours varchar (ce qui est mauvais pour les performances) et ne permet pas une taille minimale.
Si Rails ne comprend pas le type de colonne, il le transmettra directement à la base de données. Donc, si vous voulez un caractère au lieu de varchar, remplacez simplement:
t.column :token, :string
Avec:
t.column :token, "char(12)"
Bien sûr, cela peut ou non rendre vos migrations non portables vers une autre base de données.
(crédit à http://laurelfan.com/2010/1/26/special-mysql-types-in-Rails-migrations )
def self.up
add_column("admin_users", "username", :string, :limit => 25)
end
def self.down
remove_column("admin_users", "username")
end
Vous pouvez utiliser le type de chaîne avec l'option limit dans votre fichier de migration comme ceci:
t.string :name, :limit => 12, :null => false
Pour un type spécifique de base de données, nous pouvons désormais utiliser:
t.column(:column_name, 'char(12)')
Et pour un exemple complet:
class Foo < ActiveRecord::Migration
def change
create_table :foo do |t|
t.column(:column_name, 'custom_type')
t.timestamps
end
end
end