我想覆盖 Rails 3 中 ActiveSupport::CoreExtensions::String::Inflections.foreign_key 的行为,不确定如何正确执行。
在 Rails 2.3 中,我创建了一个打开类并重新定义方法的插件,但它似乎在 3.0 中不起作用
我想覆盖 Rails 3 中 ActiveSupport::CoreExtensions::String::Inflections.foreign_key 的行为,不确定如何正确执行。
在 Rails 2.3 中,我创建了一个打开类并重新定义方法的插件,但它似乎在 3.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"