2016-09-19 5 views
2

Ich bin ein paar Jahre alt ziemlich große Rails 4.1 App, wo eines der zentralen Modelle eine Spalte namens model_name hat.Upgrade Schienen 4.1 bis 4.2 Spalte Name Problem

Nach dem fehlgeschlagenen Versuch, die App auf Schienen 4.2 zu aktualisieren, haben wir herausgefunden, dass dieser Spaltenname tatsächlich ein reserviertes Wort ist. Dies war uns vorher nicht aufgefallen, da die Methode der Schienen, die den Namen verwendete, eine private Methode war. Nun, seit Schienen 4.2 ist das öffentlich, und Rails beklagt sich riesig über die Namensgebung.

ich wirklich wirklich wirklich will nicht, dass die Spalt umbenennen, da es überall in unserer Anwendung referenziert ist, auch in einer Menge von serialisierten Daten, historische URL usw.

Irgendwelche Vorschläge auf einem alternativen Upgrade-Verfahren anders als die Umbenennung die Kolumne?

+1

außerhalb von Patching/Ihre eigene Gabel von Schienen gehalten wird, bin ich nicht sicher, dass viel Auswahl. Da model_name wird überall in der Schiene Quelle verwendet. – Doon

+1

Ich würde einfach einen OOP-Ansatz nehmen und eine model_name-Methode in Ihrer Modellklasse definieren, die das tut, was Sie brauchen. Sollte bei Bedarf nur die Standardeinstellungen überschreiben, da Sie in 4.1 keine Probleme hatten. – bkunzi01

Antwort

1

Zumindest müssen Sie model_name in Ihrer Datenbank und Modell umbenennen. Innerhalb von serialisierten Daten der URL usw. können Sie es so lassen, wie es ist. Sie müssen "nur" den neuen Accessor des Modells verwenden. Ich würde empfehlen, diese Methode langfristig nicht in Ihrer Modellklasse neu zu definieren. Sie können nicht vorhersagen, welche 3rd Party Gem oder Rails interne Funktion auf das Verhalten von model_name beruht.

Auf kurze Sicht können Sie diese colum innerhalb der Datenbank und Verwendung umbenennen versuchen:

def model_name 
    read_attribute(:new_column_name) 
end 

def model_name=(new_modelname) 
    read_write_attribute(:new_column_name, new_modelname) 
end 
Verwandte Themen