2012-05-08 219 views
0

我创建了一个为Rails的fields_for方法添加功能的rails gem,我希望它可以从任何表单构建器调用。为了保持简洁,可继承(从form_for,nested_fields_for等)到向后兼容,我开始认为重写fields_for方法是最好的方法。Ruby/Rails:重写rails方法的正确方法是什么?

虽然我之前没有这样做,我可以想象一些丑陋的问题。具体来说:

  • 我需要在新的一个调用原始fields_for方法(通过alias_method)。如果Rails改变了这种方法在将来的工作方式,我猜我的创业板将打破所有fields_for功能(?)

  • 如果另一个gem重写fields_for,我怀疑我或其他gem的fields_for方法将被忽略(?)

  • 一般来说,覆盖现有导轨方法的想法看起来很狡猾。

我确定这是其他开发者面临的问题,我只是想知道 - 覆盖rails方法的标准方法是什么?它是更好的开发人员中的一个大禁忌吗?是否有另一种解决这类问题的方法?我是否应该只是简单而优雅的解决方案,然后用不同的方法命名呢?

任何建议表示赞赏。

+0

您不需要在超类中别名方法。只要叫超级。 ruby super在父类中调用相同的方法。 –

回答

3

而不是重写您的方法,我会从simple_form和formtastic采取一个页面。这两种方法都有效地改变了form_for方法,但是它们创建了一个新的方法。

<%= simple_form_for @model do |f| %> 
<% end %> 

通过这种方式,您可以将您不需要的所有内容变形为form_for,并保持与方法签名更改绝缘。

相关问题