2012-01-19 10 views
0

私はカスタムフォームビルダーを持っています。スーパークラスメソッドをオーバーライドしたい場合を除いて動作します。カスタムFormBuilderスーパークラスはSafeBufferです。私は何が欠けていますか?

私は次の操作を実行した場合:

class MyFormBuilder < ActionView::Helpers::FormBuilder 
    def number_field(value, options = {}) 
    super.number_field(value, options) 
    end 
end 

と私のフォーム上

'f.number_field(:value)' 

を呼び出して、私は次のエラーを取得する:

undefined method `number_field' for #<ActiveSupport::SafeBuffer:0x007f9a44b762f0> 

私は

raise "class: #{super.class}" 
と呼ばれています番号フィールドの内部

と私が取得:

クラス:activesupportの:: SafeBuffer

だから、エラーが私のオーバーライドされたメソッドから発生されます。スーパークラスメソッドを呼び出さない他のメソッドは、フォームビルダーで正常に動作します。私が間違っていることは何か考えていますか?

答えて

1

引数なしでsuperを呼び出してみてください。

これは、元の呼び出しに渡された同じ引数を持つメソッドのActionView :: Helpers :: FormBuilderのバージョンを呼び出します。

実際にメソッドをオーバーライドする場合は、独自のコードを提供する必要があります。以下のような何か試してみてください:

class MyFormBuilder < ActionView::Helpers::FormBuilder 
    def number_field(value, options = {}) 
    "foo" 
    end 
end 

をそしてfoof.number_field(:value)プリントを呼び出すかどうかを確認します。

そして、あなたの本当にやりたいことでnumber_fieldメソッドの勇気を入れ替えてください。

関連する問題