【问题标题】:Upgrade rails 4.1 to 4.2 column name issue将 rails 4.1 升级到 4.2 列名问题
【发布时间】:2016-09-19 12:44:26
【问题描述】:

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

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

我真的真的不想重命名该列,因为它在我们的应用程序中的任何地方都被引用,即使在大量序列化数据、历史 URL 等中也是如此。

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

【问题讨论】:

  • 除了修补/维护自己的分叉路轨之外,我不确定您是否有那么多选择。由于在 rails 源代码中到处都使用了 model_name。
  • 我只是采用 OOP 方法并在您的模型类中定义一个 model_name 方法来满足您的需要。应该只在需要时覆盖 rails 默认值,因为您在 4.1 中没有遇到问题。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多