2 Stimmen

Inkonsistente Rails-Datenbankschemaerstellung für boolesche Felder

Rails version = 2.3.8

Beim Vergleich der Schemas von zwei meiner Websites, von denen jede eine nahezu identische Codebasis hat, fiel mir etwas sehr Seltsames auf. Für die genau gleiche Tabelle zeigt das Schema einer Website:

t.integer  "member_feed",   :limit => 1, :default => 1

und für die andere:

t.boolean  "member_feed",   :default => true

Es gab keinen Unterschied in der Art und Weise, wie sie erstellt wurden. Tatsächlich wurde das erste aus dem zweiten extrahiert, als die Website erstellt wurde. Dieses erste Schema hatte mindestens 40 verschiedene Fälle, in denen boolean falsch angezeigt wurde, und ich musste jedes einzelne mit einer change_column-Migration ändern. Beachten Sie, dass es definitiv einen Unterschied in der Funktionalität gibt, wenn boolean nicht explizit definiert ist.

Hat jemand eine Idee, was das verursachen könnte? Danke.

2voto

Taryn East Punkte 26660

Dies geschieht, wenn Sie Migrationen von verschiedenen Betriebssystemen ausführen. Es liegt nicht am MySQL von Rails, sondern am tatsächlichen MySQL.

Einige Versionen davon speichern einfach nicht die Tatsache, dass es Grenzen und andere Flags gibt... normalerweise diejenigen, die tatsächlich eine eingebaute boolesche Klasse haben und somit die Notwendigkeit für ein Limit => 1 entfernen (Sie werden auch feststellen, dass es bei einigen Versionen von "Präzision" für Dezimalwerte scheitert).

Das Problem tritt auf, weil MySQL annimmt, dass alle anderen Versionen eine eingebaute Klasse haben... was natürlich nicht der Fall ist.

Das ist ein integriertes Systemfehler, der wirklich nicht behoben werden kann. Es tut uns leid. :(

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X