ruby-on-rails - 在 Rails 中弃用整个模型

标签 ruby-on-rails class model deprecated

我正在为从 Rails 2.x 到 3.x 的客户端重写/重构遗留应用程序。作为重构的一部分,我还想从我们本地语言的模型/方法转向纯英语代码库。

这涉及为几乎每个功能编写新方法。我通过执行以下操作来解决此方法:

def english_method
  # ...
end

def native_method
  warn 'DEPRECATED, please use #english_method'
  english_method
end

这适用于方法,并帮助我跟踪仍在使用旧方法的位置,而不会破坏任何代码。

然而,对于类(模型),我一直在做:

class NativeClass < EnglishClass
  # DEPRECATED, Please use EnglishClass
end

class EnglishClass
  # ...
end

这个“有效”,无论何时 NativeClass被调用,应用程序继续工作,但我没有在日志中收到任何消息通知我应用程序的一部分仍在调用 NativeClass .

我怎样才能确保 NativeClass 的每一次“触摸”实际上会导致写入日志错误?

我尝试(除了认为“也许这行得通”之外没有其他原因)这样做:

class NativeClass < EnglishClass
  -> { ActiveSupport::Deprecation.warn 'Native model is deprecated in favor of English' }
end

但这(显然?)不起作用。我认为 lambda 每次都会被延迟加载 NativeClass被调用了,但是我对 lambdas 的理解还是有些肤浅,所以我在这里可能会误会。

关于如何弃用整个类并在我的日志被触摸时向我的日志发送警告消息的任何线索?

欢迎使用其他“最佳实践”和/或弃用解决方案,但我不确定这是否是 SO 的有效问题(我不想冒着因这个问题而关闭此主题的风险)。

最佳答案

尝试使用像:

class NativeClass < EnglishClass
  def initialize
    ActiveSupport::Deprecation.warn "NativeClass is deprecated and may be removed from future releases, use EnglishClass instead.", caller
    super
  end
end

关于ruby-on-rails - 在 Rails 中弃用整个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668262/

相关文章:

javascript - Kendo UI TreeView dataTextField 和 model.fields.text.from 之间的区别

mysql - 设计公司->所在位置->产品数据库

mysql - 我的连接表似乎不起作用

ruby-on-rails - Rails 3 Sidekiq 乘客

mysql - Rails 在 db 的所有列中搜索值而不显式命名它们

python - 如何从类中获取对象名称?

ios - 如何在 Swift 中为不同文件中的类定义函数?

python - __init__() 获得意外的关键字参数 'conne'

ruby-on-rails - 不区分大小写的用户名 URL

ruby-on-rails - CanCan-如何允许用户仅更新和删除自己的对象