Vous devez utiliser text
avec des Rails si vous voulez une chaîne sans limite de longueur. Une migration comme ceci:
def up
change_column :your_table, :your_column, :text
end
def down
# This might cause trouble if you have strings longer
# than 255 characters.
change_column :your_table, :your_column, :string
end
devrait arranger les choses. Vous souhaitez peut - :null => false
ou quelques autres options sur la fin de ce trop.
Lorsque vous utilisez un string
colonne sans une limite explicite, les Rails ajouter un implicite :limit => 255
. Mais si vous utilisez text
, vous allez obtenir ce que la longueur arbitraire de type chaîne de la base de données prend en charge. PostgreSQL permet d'utiliser un varchar
colonne sans longueur, mais la plupart des bases de données utilisent un type distinct pour que les Rails et ne savent pas à propos de varchar
sans longueur. Vous devez utiliser text
dans les Rails pour obtenir un text
colonne dans PostgreSQL. Il n'y a pas de différence dans PostgreSQL entre une colonne de type text
et une autre de type varchar
(mais varchar(n)
est différent). En outre, si vous déployez sur le dessus de PostgreSQL, il n'y a pas de raison d'utiliser :string
(AKA varchar
), la base de données gère text
et varchar(n)
de même en interne, sauf pour la longueur supplémentaire de contraintes pour l' varchar(n)
; vous ne devez utiliser varchar(n)
(AKA :string
) si vous avez une contrainte externe (comme une forme de gouvernement qui dit que le terrain de 432 sur le formulaire 897/B sera de 23 caractères) sur la taille de la colonne.
En aparté, si vous utilisez un string
colonne n'importe où, vous devez toujours spécifier l' :limit
comme un rappel pour vous-même qu'il ya une limite et vous devriez avoir une validation dans le modèle afin que la limite n'est pas dépassée. Si vous dépassez la limite, PostgreSQL va se plaindre et lever une exception, MySQL va tranquillement tronquer la chaîne ou de se plaindre (en fonction de la configuration du serveur), SQLite va la laisser passer, et d'autres bases de données ne sont autre chose (probablement se plaindre).
En outre, vous devez également être en développement, le test et le déploiement sur le dessus de la même base de données (qui sera généralement PostgreSQL à Heroku), vous devriez utiliser les mêmes versions de la base de données du serveur. Il existe d'autres différences entre les bases de données (tels que le comportement de GROUPE) qui ActiveRecord de ne pas vous isoler. Vous avez peut-être déjà, mais j'ai pensé que je le mentionne quand même.