2012-05-08 3 views
0

私は、Railsのfields_forメソッドに機能を追加するためのレール宝石を作成しています。どのフォームビルダーからでも呼び出せるようにしたいと思います。簡潔で継承可能な(form_for、nested_fields_forなどから)継承し、下位互換性を保つために、fields_forメソッドをオーバーライドすることが最善の方法です。Ruby/Rails:レールメソッドをオーバーライドする正しい方法は?

これまで私はこれをやっていませんでしたが、私はいくつかの醜い問題を想像することができます。具体的には

  • 新しいフィールドでは、元のfields_forメソッド(alias_method経由)を呼び出す必要があります。その方法が今後どのように変更されるのか、私は宝石がすべてのfields_for機能を破ると推測しています(
  • 別の宝石がfields_forを上書きすると、私の欄や他の宝石のfields_forメソッドは無視されます(?)

  • 一般的に、既存のレールメソッドを上書きするという考え方はかなりシンプルなようです。

これは他の開発者が直面していることだと思いますが、レールメソッドを上書きする標準的なアプローチは何ですか?より良い開発者の間で大きなタブーになっていますか?このような問題には別のアプローチがありますか?結局のところ、簡潔でエレガントなソリューションのための私の試みを念頭に置いて、結局別のメソッド名でそれをやってみるべきですか?

感謝の意を表します。

+0

スーパークラスのメソッドのエイリアスを行う必要はありません。スーパーに電話してください。ルビスーパーは、親クラスの同じメソッドを呼び出します。 –

答えて

3

あなたのメソッドをオーバーライドするのではなく、simple_formとformtasticからページを取得します。どちらも効果的にform_forメソッドを変更しますが、上に新しいメソッドを作成します。あなたができる

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

この方法では、すべてあなたがに応答しないと、メソッドシグネチャの変更から絶縁滞在のためのform_forに出delate。

関連する問題