Le texte suivant est-il correct ?
change_column :tablename, :fieldname, :limit => null
Le texte suivant est-il correct ?
change_column :tablename, :fieldname, :limit => null
Si vous avez précédemment spécifié une limite dans une migration et que vous voulez simplement supprimer cette limite, vous pouvez le faire :
change_column :users, :column, :string, :limit => 255
255 est la longueur standard d'une colonne de chaînes de caractères, et les rails effacent simplement la limite que vous avez spécifiée précédemment.
Mis à jour :
Bien que cette méthode fonctionne dans un certain nombre de versions de Rails, il serait probablement plus approprié d'utiliser nil
comme dans la réponse de Giuseppe.
change_column :users, :column, :string, :limit => nil
Cela signifie que la seule chose que tu faisais mal était d'utiliser null
au lieu de nil
.
Voici ce qui m'est arrivé.
Je me suis rendu compte qu'un champ de type chaîne de caractères que j'avais dans une table n'était pas suffisant pour contenir son contenu, j'ai donc généré une migration qui contenait :
def self.up
change_column :articles, :author_list, :text
end
Après avoir exécuté la migration, cependant, le schéma avait :
create_table "articles", :force => true do |t|
t.string "title"
t.text "author_list", :limit => 255
end
Ce qui n'était pas bon . J'ai donc "refait" la migration comme suit :
def self.up
# careful, it's "nil", not "null"
change_column :articles, :author_list, :text, :limit => nil
end
Cette fois, la limite a disparu dans schema.rb :
create_table "articles", :force => true do |t|
t.string "title"
t.text "author_list"
end
Les chaînes de caractères sans limite ne sont pas prises en charge par la plupart des bases de données : vous devez spécifier la taille dans les champs suivants varchar(SIZE)
définition.
Bien que vous puissiez essayer, j'opterais personnellement pour :limit => BIG_ENOUGH_NUMBER
. Vous pouvez également envisager d'utiliser le type CLOB pour les textes très volumineux.
Pour le rendre indépendant du pilote de base de données, il faut écrire quelque chose comme ceci :
add_column :tablename, :fieldname_tmp, :text
Tablename.reset_column_information
Tablename.update_all("fieldname_tmp = fieldname")
remove_column :tablename, :fieldname
rename_column :tablename, :fieldname_tmp, :fieldname
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.