2010-08-14 3 views

Antwort

90

Wenn Sie zuvor eine Grenze in einer Migration angegeben und möchte nur die Grenze entfernen, können Sie dies nur tun:

255 ist die Standardlänge für eine String-Spalte, und Rails werden nur das Limit löschen, das Sie zuvor angegeben haben.

Aktualisiert:

Während dies in einer Reihe von Rails-Versionen funktioniert, haben Sie wahrscheinlich besser geeignet wären nil wie in Giuseppe Antwort zu verwenden.

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

Das bedeutet, dass das einzige, was Sie falsch gemacht wurden, wurde null statt nil verwenden.

0

Streicher ohne Limit ist nicht etwas, die meisten Datenbanken unterstützen: Sie Größe in varchar(SIZE) Definition angeben müssen.
Obwohl Sie versuchen könnten, würde ich persönlich mit :limit => BIG_ENOUGH_NUMBER gehen. Sie können auch den CLOB-Typ für sehr große Texte verwenden.

0

Um es db-fahrerunabhängige ein smth so schreiben sollte:

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 
3

Ändern Sie den Spaltentyp in :text. Es hat keine Begrenzung.

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

das ist falsch ...Wenn Sie einfach von: string zu: text wechseln, wird rake db: migrate das Limit an Ort und Stelle belassen, was zu Fehlern führen wird, wenn Sie versuchen, heroku rake db: schema: load – jpwynn

34

Hier ist, was mir passiert ist.

Ich erkennen, dass ein String-Feld I in einer Tabelle hatte nicht ausreichend war, um seinen Inhalt zu halten, so erzeugen ich eine Migration, die enthielt:

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

Nach der Migration ausgeführt wird, das Schema hatte jedoch:

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

Das war nicht OK. So dann ich "umgestrickt" die Migration wie folgt:

def self.up 
    # careful, it's "nil", not "null" 
    change_column :articles, :author_list, :text, :limit => nil 
end 

Dieses Mal wurde die Grenze in schema.rb gegangen:

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

Für mich brauchte ich Rake db: migrate: reset um das Limit wirklich zu ändern, und man sollte bei diesem Befehl vorsichtig sein, weil er die Datenbank löscht. – p1100i

0

Ich war das gleiche Boot heute versuchen, eine Grenze I zu entfernen 'd zu einem Textfeld hinzugefügt und es würde nicht dauern. Versuchte mehrere Migrationen.

Rails 4.2.7.1 Rubin 2.3.1p112

Am Ende das einzige, was gearbeitet wurde eine Grenze von 255 Angabe Der Versuch, etwas zu justieren sonst würde für mich nicht.