升级 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
我运行几岁了还挺大的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