Question Dans une migration de rails, comment supprimer la limite d'un champ


Est-ce que ce qui suit est correct?

 change_column :tablename, :fieldname, :limit => null

46
2017-08-14 16:51


origine


Réponses:


Si vous avez déjà spécifié une limite dans une migration et que vous souhaitez simplement supprimer la limite, vous pouvez simplement faire ceci:

change_column :users, :column, :string, :limit => 255

255 est la longueur standard pour une colonne de chaîne et les rails effacent simplement la limite que vous avez précédemment spécifiée.

Actualisé:

Bien que cela fonctionne dans un certain nombre de versions de Rails, vous seriez probablement mieux adapté pour utiliser nil comme dans la réponse de Giuseppe.

change_column :users, :column, :string, :limit => nil

Cela signifie que la seule chose que vous faisiez mal était d'utiliser null au lieu de nil.


91
2017-12-07 07:04



Voici ce qui m'est arrivé.

Je me suis rendu compte qu'un champ de chaîne que j'avais dans une table n'était pas suffisant pour contenir son contenu, j'ai donc généré une migration contenant:

def self.up
  change_column :articles, :author_list, :text
end

Après l'exécution de la migration, le schéma comportait:

create_table "articles", :force => true do |t|
  t.string   "title"
  t.text     "author_list", :limit => 255
end

Ce qui n'était pas correct. Alors, je "refais" 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

34
2017-12-29 14:08



Changer le type de colonne en :text. Il n'a pas de limite.

change_column :tablename, :fieldname, :text, :limit => nil

3
2017-12-07 08:04



Les chaînes sans limite ne sont pas quelque chose que la plupart des bases de données prennent en charge: vous devez spécifier la taille dans varchar(SIZE) définition.
Bien que vous puissiez essayer, je vais personnellement avec :limit => BIG_ENOUGH_NUMBER. Vous pouvez également envisager d'utiliser le type CLOB pour de très gros textes.


0
2017-08-14 17:01



Pour le rendre indépendant du pilote de base de données, il faut écrire 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

0
2017-08-14 21:18



J'étais le même bateau aujourd'hui, essayant de supprimer une limite que j'avais ajoutée à un champ de texte et cela ne prendrait pas. J'ai essayé plusieurs migrations.

Rails 4.2.7.1 Ruby 2.3.1p112

Au bout du compte, la seule chose qui fonctionnait était de spécifier une limite de 255. Essayer de s’adapter à autre chose ne fonctionnerait pas pour moi.


0
2018-03-31 16:24