Ich konvertiere eine Rails App von mysql (mysql2 gem) nach postgres (pg gem).
Mit% mysql ruft ActiveRecord::Base.connection.select_value
entsprechend den Daten typisierte Rückgabewerte auf, zum Beispiel:
Bei Postgres gibt connection.select_value
jedoch immer eine Zeichenkette zurück:
Das hat ein paar Unit-Tests gekostet, und während diese reparierbar sind, bin ich sicher, dass wir anderen Code haben, der sich auf diese Rückgabewerte stützt. Gibt es eine Möglichkeit, richtig eingegebene Rückgabewerte von connection.select_value
zu erhalten, wenn Postgres verwendet werden?
Die kurze Antwort ist nein. Der 'pg' Treiber bietet absichtlich eine so dünne Schicht wie möglich über den nativen 'libpq' Treiber. Typecasting wird nicht durchgeführt, da dies in der Verantwortung höherer Bibliotheken liegt, die Einblick in die Domäne haben, in der die Ergebnisse verwendet werden. Die Gründe für diese Entscheidung sind im PostgreSQL-Wiki dokumentiert, und ich würde mich freuen, es mit Ihnen weiter zu besprechen auf der Mailingliste .
Für diejenigen, die hier auf der Suche nach einer ActiveRecord-Attribut (Rails) spezifischen Antwort sind: Ich habe einige Tests durchgeführt ( Ссылка ) und festgestellt, dass:
%Vor%gibt einen String mit Rails & lt; 4 und ein Fixnum mit Rails & gt; = 4.
Der Postgres-Adapter leitet die Typen von der Datenbank an das Persistenzmodul weiter, so dass das Casting transparent durchgeführt werden kann.
Tags und Links ruby-on-rails-3 mysql activerecord postgresql pg