2016-09-19 193 views
2

我正在運行幾年大的Rails 4.1應用程序,其中一箇中央模型有一個名爲model_name的列。升級rails 4.1至4.2列名問題

在嘗試將應用程序升級到rails 4.2失敗後,我們發現該列名實際上是一個rails保留字。這之前沒有引起我們的注意,因爲使用名稱的rails方法是一種私有方法。現在,由於rails 4.2是公開的,並且rails抱怨命名混淆的時間很長。

我真的真的真的不想重命名列,因爲它在我們的應用無處不在引用,甚至在很多串行數據的,歷史的URL等

比重命名其他的替代升級過程的任何建議列?

+1

修補/維護自己的軌道叉之外,我不知道你有太多的選擇。由於model_name在rails源代碼中被廣泛使用。 – Doon

+1

我只是採取面向對象的方法,並在您的模型類中定義一個model_name方法,以滿足您的需求。由於您尚未遇到4.1中的問題,因此只應在需要時重寫rails默認值。 – bkunzi01

回答

1

至少您必須在您的數據庫和型號中重命名model_name。在URL的序列化數據中,您可以保持原樣。您「只」必須使用模型的新訪問者。我建議不要在您的模型類中長期重新定義此方法。您無法預測哪些第三方寶石或Rails內部函數依賴於model_name的行爲。

在短期內你可以嘗試在數據庫和應用中重命名此科拉姆:

def model_name 
    read_attribute(:new_column_name) 
end 

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