Ich habe eine Spalte in meiner MySQL-Datenbank, die vom Typ TINYINT (1) ist. Ich muss die tatsächlichen ganzen Zahlen in dieser Spalte speichern. Das Problem ist, dass Rails 4.1 aufgrund des Spaltentyps davon ausgeht, dass diese Spalte nur boolesche Werte enthält, so dass alle Werte außer 0 oder 1 beim Schreiben in die Datenbank auf 0 gesetzt werden.Rails 4.1 - Schreiben Sie in die MySQL-Datenbank ohne Typumwandlung
Ich möchte nicht einfach die boolesche Emulation deaktivieren, da wir eine Reihe von Spalten in unserer Datenbank haben, in denen wir TINYINT (1) verwenden, um einen booleschen Wert darzustellen. Und ich bin derzeit nicht in der Lage, die Spaltentypen in MySQL zu ändern.
Wie kann ich erzwingen, dass Rails 4.1 den Schritt der Typumwandlung überspringt und stattdessen direkt in die Datenbank schreibt?
(Dieser Auszug aus der Rails 4.1 Quelle von Nutzen sein kann: https://github.com/rails/rails/blob/4-1-stable/activerecord/lib/active_record/attribute_methods/write.rb)
Weitere Kontext für andere Leser, 'TINYINT (1)' können signierte speichern ganzzahlige Werte -127 .. + 127 http://stackoverflow.com/questions/4401673/mysql- boolean-tinyint1-holds-values-up-to-127, aber MySQL [verwendet 'BOOLEAN' als Synonym dafür] (https://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview .html). –
Wäre es das Ende der Welt, wenn Sie diese Spalte über eine Migration zu einem regulären 'INT' öffnen würden? – tadman
@tadman Glauben Sie mir, der Gedanke kam mir in den Sinn, aber aus Gründen außerhalb meiner Kontrolle kann ich die Struktur dieser Datenbank nicht ändern. –