Vor einigen Jahren (2013) schrieb ich eine Migration, um eines der Felder meines Modells mit Globeize 0.3.0, Rails 3.2.21, Ruby 2.1.6 zu globalisieren:
%Vor%Und ich habe das entsprechende Übersetzungsattribut hinzugefügt:
%Vor% Nun möchte ich ein zweites globalisiertes Attribut namens title
hinzufügen, also habe ich diese Zeile zu MyModel hinzugefügt:
Noch bevor ich das zweite Migrationsskript geschrieben habe, lösche ich meine Datenbank und führe alle Migrationen durch.
%Vor%Ich stelle fest, dass das Migrationsskript, das ich 2013 geschrieben habe, fehlschlägt. Wie ist das möglich? Das weiß ich bis jetzt.
Die Methode create_translation_table!
in meinem 2013 Migrationsskript fügt der Übersetzungstabelle alle übersetzbaren Felder hinzu, die im Modell gefunden wurden, also sowohl :name
als auch :title
. IMHO, das ist ein bisschen seltsam, weil dieser Code in der Tat Datenbankänderungen durchführt, die dem Modell nach der Erstellung der Migration hinzugefügt wurden.
Das Juwel "Globalize" versucht, den Typ von :title
zu erraten, und es scheint fehl zu schlagen, weil ich diesen Fehler beim Ausführen des Migrationsskriptes 2013 erhalte:
Bad field type for field :title (nil), should be :string or :text
Ich suche nach einem Weg, um eine dieser Optionen zu erreichen:
:title
erstellt, wenn Sie das Migrationsskript 2013 ausführen, und erstellen Sie ein Migrationsskript 2015, um diese Spalte ohne Übersetzungstabelle hinzuzufügen (ich denke, diese Option ist besser) :title
eine Zeichenkette ist (Ich habe translates :title, :string
bereits probiert und scheint nicht zu funktionieren). Ich hatte zuvor ein ähnliches Problem und eine der gefundenen Lösungen bestand darin, immer die übersetzten Attribute in der Migration anzugeben:
%Vor%Es wurde auch vorgeschlagen, die Globalisierungsgeneratoren zusammen zu vermeiden und die Übersetzungstabellen manuell zu erstellen:
%Vor%Tags und Links ruby ruby-on-rails migration