升级rails 4.1到4.2列名称问题

时间:2016-09-19 12:44:26

标签: ruby-on-rails ruby ruby-on-rails-4 reserved-words

我正在运行几年前相当大的Rails 4.1 App,其中一个核心模型有一个名为model_name的列。

尝试将应用程序升级到rails 4.2失败后,我们发现这个列名实际上是一个rails保留字。之前没有引起我们的注意,因为使用该名称的rails方法是一种私有方法。现在,因为rails 4.2这是公开的,并且rails抱怨命名混乱的大量时间。

我真的真的不想重命名专栏,因为它在我们的应用程序中随处可见,即使在很多序列化数据,历史URL等等。

除了重命名列之外,有关替代升级过程的任何建议吗?

1 个答案:

答案 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