在我们继续之前,您确定 polymorphic_url 存在于 Rails 2.2.1 之前的版本中吗?
您的代码大部分是正确的,您忘记调用该方法的原始版本。在 alias_method_chain 调用之后,它被重命名为 polymorphic_url_without_compat。
class ActiveRecord::PolymorphicRoutes
def polymorphic_url_with_compat(*args)
whatever...
return polymorphic_url_without_compat(*args)
end
alias_method_chain :polymorphic_url, :compat
end
您提到您尝试将其添加到插件中,因此如果前一点解决了您的问题,则可能不需要以下操作。
确保它在 Rails 核心之后加载的最佳方法是将其转换为插件。
$ script/generate plugin polymorphic_url_backport
将创建一个插件存根。从这一点开始的所有方向都与创建的插件目录相关。
在 init.rb 添加
if RAILS_GEM_VERSION < "2.2.1"
require File.dirname(__FILE__) + '/lib/yournamespace'
ActionController::PolymorphicRoutes.send(:include, YourNameSpace::ActionController::PolymorphicRoutes)
end
然后将上面的代码粘贴到你的 lib/yournamespace.rb
module YourNameSpace
class ActiveRecord::PolymorphicRoutes
def included(base)
base.class_eval %~
def polymorphic_url_with_compat(*args)
whatever...
return polymorphic_url_without_compat(*args)
end
alias_method_chain :polymorphic_url, :compat
~
end
end
end
Just make sure the plugin ships with your application and there should be no problems. You could alternately add this to the lib of your rails root, but I'm no sure exactly where you would place the require code to run it at the right time.