2017-11-20 3 views
0

私は、レールフォーム用の新しいヘルパーメソッドを追加するための宝石を作成しています。レールフォームヘルパーを追加する宝石の作成

:私は次のエラーが表示さ

= f.json_field_tag(:some_method) 

require 'action_view/helpers' 
require 'action_view/context' 
require 'securerandom' 

module ActionView 
    module Helpers 
    class FormBuilder 
     include ActionView::Helpers::FormTagHelper 
     include ActionView::Helpers::JavaScriptHelper 
     include ActionView::Context 

     def json_field_tag(method, options = {}) 
     #function code here 
     end 
    end 
    end 
end 

ActiveSupport.on_load(:action_view) do 
    include ActionView::Helpers::FormBuilder 
end 

しかし、私はそうのようなメソッドを使用する場合:私の宝石は、このようになります単一のファイル

lib/rails_json_field.rb 

です

ActionView::Template::Error (undefined method `json_field_tag' for #<ActionView::Helpers::FormBuilder:0x007ffa84ab52a8>) 

どのようにしてメソッドを作成するのですか? ActionView::Helpers::FormBuilderにありますか?

答えて

1

あなたは以下のクラスを定義しています

RailsJsonField::ActionView::Helpers::FormBuilder 

あなたは以下のクラスモンキーパッチを意図:

ActionView::Helpers::FormBuilder 

エラーメッセージは、メソッドが定義されていないあなたを語っている理由です。あなたのカスタムモジュール内ではなく、指定されたクラス内のクラス内に定義されています

undefined method `json_field_tag' for #<ActionView::Helpers::FormBuilder 

それだけRailsJsonField::ActionView::Helpers::FormBuilderで定義されているので、あなたは上記のエラーを取得しています。

あなたが適切に元のコードをモンキーパッチしたいなら、あなたはあなたコードはtheir codeのように見えることを確認するために、元のコードをご覧ください:

module ActionView 
    module Helpers 
    class FormBuilder 
     def json_field_tag(method, options = {}) 
     # function code here 
     end 
    end 
    end 
end 

あなたの中に初期化子としてこれを定義する方が良いだろうRailsアプリ(例えば、config/initializers/json_field_tag.rb)。単純なパッチとして動作するコードを作成したら、それを発展させてスタンドアロンの宝石に発展させて、ActionViewを強化することができます。

+0

感謝を返信するために。私はイニシャライザとして動作させることができますが、同じコードが宝石で動作しません(質問に含まれるエラーが発生します)。問題をデバッグする方法や、宝石のコードを初期化する適切な方法についてのアイデアはありますか?私は質問のコードを更新しました。 – dyeje

関連する問題