Ist das Folgende korrekt?Wie können Sie bei einer Schienenmigration das Limit eines Feldes entfernen?
change_column :tablename, :fieldname, :limit => null
Ist das Folgende korrekt?Wie können Sie bei einer Schienenmigration das Limit eines Feldes entfernen?
change_column :tablename, :fieldname, :limit => null
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.
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.
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
Ändern Sie den Spaltentyp in :text
. Es hat keine Begrenzung.
change_column :tablename, :fieldname, :text, :limit => nil
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
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
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.
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