我正在运行几年前相当大的Rails 4.1 App,其中一个核心模型有一个名为model_name
的列。
尝试将应用程序升级到rails 4.2失败后,我们发现这个列名实际上是一个rails保留字。之前没有引起我们的注意,因为使用该名称的rails方法是一种私有方法。现在,因为rails 4.2这是公开的,并且rails抱怨命名混乱的大量时间。
我真的真的不想重命名专栏,因为它在我们的应用程序中随处可见,即使在很多序列化数据,历史URL等等。
除了重命名列之外,有关替代升级过程的任何建议吗?
答案 0 :(得分:1)
至少你必须在数据库和模型中重命名model_name
。在URL的序列化数据等中,您可以保持原样。你"只有"必须使用模型的新访问器。我建议不要长期在模型类中重新定义此方法。您无法预测哪个第三方gem或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