Hier ist mein schema.rb
%Vor%Ich habe das Limit für die Zeichenfolge "name" festgelegt.
Dann in der Konsole:
%Vor%Es hat den Fehler ausgelöst:
%Vor%Aber als ich zu rails 3 wechselte.
Ich habe festgestellt, dass die Zeichenfolge " 1234567890 " automatisch abgeschnitten und " 123456 " in die Datenbank eingefügt wurde Fehler.
Gibt es etwas, das in rails 4 entfernt wurde?
Sollte ich einige Funktionen im Modell selbst hinzufügen? Danke!
Was Sie sehen, ist ein Unterschied in MySQL, nicht in Rails. Standardmäßig schneidet MySQL Daten ab, die zu lang sind, anstatt einen Fehler auszulösen. Wenn Sie MySQL auf den strict
-Modus einstellen, werden Fehler ausgelöst, anstatt Daten stillschweigend zu kürzen.
Mit Version 4 aktiviert Rails standardmäßig den strikten Modus . Aus diesem Grund sehen Sie bei Rails 3 ein anderes Verhalten. Dieses ist das Verhalten, das Sie wahrscheinlich möchten. Das stille Abschneiden von Daten ist fast immer schlecht und kann zu einem sehr verwirrenden Verhalten der Benutzer führen.
Wenn Sie wirklich möchten, dass die Daten abgeschnitten werden, könnten Sie schalte den strikten Modus aus oder verwende einen before-Filter:
%Vor%Ich stolperte über diesen Artikel , der zufällig erst vor ein paar Tagen geschrieben wurde.
>Der wichtigste Punkt von Interesse ist dies:
... Ich habe kürzlich von Rails 3.2 auf Rails 4.0 aufgerüstet. Sie implementierten ein größere Änderung mit ActiveRecords, die ich nicht erwähnen kann wo außer im Quell- und Änderungsprotokoll.
mysql
undmysql2
Verbindungen werden standardmäßig aufSQL_MODE=STRICT_ALL_TABLES
gesetzt, um einen stillen Datenverlust zu vermeiden. Dies kann durch Angabe vonstrict: false
in Ihrem System deaktiviert werdendatabase.yml
.
Dies würde erklären, warum Sie den Fehler bei der Rückkehr zu Rails 3 nicht mehr erhalten haben. Sie können dies in den Optionen von MySQL-Verbindungsadaptermodul , und es sieht so aus, als wäre es hinzugefügt im Mai 2012 für den 4.1.2 Release Candidate (wenn ich die Tags richtig lese).
Diese Person löste ihr Problem mit ... [fixing] code, um entweder die richtigen Feldlängen zu haben oder die Daten manuell zu kürzen ... .
In Ihrem Fall können Sie möglicherweise Ihr Problem in Rails 4 lösen, indem Sie einfach strict: false
in Ihrem database.yml
hinzufügen. Wenn Sie anpassen möchten, wie die Daten abgeschnitten werden, stimme ich dem Vorschlag von JKen13579 über den before_save
-Rückruf zu. Ansonsten, von dem, was ich sehen kann, scheint es, die rechtesten Zeichen abzuschneiden, wenn das ausreicht, können Sie wahrscheinlich mit dem Standardkürzungsverhalten durchkommen.
Tags und Links ruby-on-rails ruby-on-rails-4 rails-migrations