升级 rails 4.1 到 4.2 列名称问题

Upgrade rails 4.1 to 4.2 column name issue

我运行几岁了还挺大的Rails 4.1 App,其中一个中心模型有一栏叫做model_name

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

我真的真的真的不想重命名该列,因为它在我们的应用程序中随处引用,甚至在大量序列化数据、历史 URL 等中也是如此

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

至少您必须在数据库和模型中重命名 model_name。在 URL 的序列化数据等中,您可以保持原样。您 "only" 必须使用模型的新访问器。从长远来看,我建议不要在您的模型 class 中重新定义此方法。您无法预测哪个第 3 方 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