如何/在何处覆盖ActiveSupport CoreExtensions String中定义的方法

时间:2012-09-06 18:40:36

标签: ruby-on-rails activesupport

我想在Rails 3中覆盖ActiveSupport :: CoreExtensions :: String :: Inflections.foreign_key的行为,不知道如何正确地执行它。

在Rails 2.3中,我创建了一个打开该类并重新定义该方法的插件,但它似乎不适用于3.0

1 个答案:

答案 0 :(得分:0)

ActiveSupport::CoreExtensions::String::Inflections#foreign_key委托给ActiveSupport::Inflector.foreign_key实际逻辑的代表,所以我建议修补后者。

尝试将其添加到config/initializers/extensions.rb

require 'inflector_extensions'

然后您的代码进入lib/inflector_extensions

module ActiveSupport::Inflector
  def foreign_key(class_name, separate_class_name_and_id_with_underscore = true)
    underscore(demodulize(class_name)) + '_my_legacy_suffix'
  end
end

这应该给出:

$ ./script/rails c
Loading development environment (Rails 3.0.11)
>> "whetever".foreign_key
=> "whetever_my_legacy_suffix"