0

Rails の fields_for メソッドに機能を追加する Rails gem を作成していますが、どのフォーム ビルダーからでも呼び出せるようにしたいと考えています。物事を簡潔にし、(form_for、nested_fields_for などから) 継承可能にし、後方互換性を維持するために、fields_for メソッドをオーバーライドすることが最善の方法であると考え始めています。

私は以前にこれを行ったことがなく、いくつかの醜い問題を想像することができます。具体的には:

  • 新しいフィールドで元の fields_for メソッドを (alias_method 経由で) 呼び出す必要があります。Rails が将来そのメソッドの動作を変更した場合、私の gem はすべての fields_for 機能を壊すと思います(?)

  • 別の gem が fields_for をオーバーライドする場合、自分または他の gem の fields_for メソッドが無視されると思います (?)

  • 一般に、既存の Rails メソッドを上書きするという考えはかなりずるいように思えます。

これは他の開発者が直面していることだと確信しています.レールメソッドを上書きする標準的なアプローチは何ですか? 優秀な開発者の間では大きなタブーですか? この種の問題に対する別のアプローチはありますか?簡潔でエレガントな解決策の試みをやめて、別のメソッド名で解決する必要がありますか?

任意の提案をいただければ幸いです。

4

1 に答える 1

3

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

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

このようにして、応答しないすべてのものを form_for に委譲し、メソッド シグネチャの変更から隔離することができます。

于 2012-05-08T17:01:39.777 に答える