【发布时间】:2012-05-17 04:40:47
【问题描述】:
我正在创建一个 Rails gem,它为 Rails 的 fields_for 方法添加了功能,我希望它可以从任何表单构建器中调用。为了保持简洁、可继承(从 form_for、nested_fields_for 等)和向后兼容,我开始认为重写 fields_for 方法是最好的方法。
虽然我以前没有这样做过,但我可以设想一些丑陋的问题。具体来说:
我需要在新的方法中调用原来的 fields_for 方法(通过 alias_method)。如果 Rails 将来改变该方法的工作方式,我猜我的 gem 会破坏所有 fields_for 功能(?)
如果另一个 gem 覆盖 fields_for,我怀疑我的或其他 gem 的 fields_for 方法将被忽略(?)
一般来说,覆盖现有的 rails 方法的想法似乎很狡猾。
我确信这是其他开发人员面临的问题,我只是想知道 - 覆盖 rails 方法的标准方法是什么?在优秀的开发人员中,这是一个大禁忌吗?有没有另一种方法来解决这类问题?我是否应该放弃尝试一个简洁、优雅的解决方案并使用不同的方法名称来完成它?
任何建议表示赞赏。
【问题讨论】:
-
您不需要为超类中的方法设置别名。就叫超级吧。 ruby super 在父类中调用相同的方法。
标签: ruby-on-rails ruby rubygems gem monkeypatching