2017-11-20 2 views
0

레일 폼에 새로운 헬퍼 메소드를 추가하기위한 젬을 생성하고 있습니다. 내 보석은 다음과 같습니다 하나의 파일레일 폼 헬퍼를 추가하는 젬 만들기

lib/rails_json_field.rb 

입니다 :

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 

을하지만 난 그렇게 같은 방법을 사용하는 경우 :

: 나는 다음과 같은 오류가 발생

= f.json_field_tag(:some_method) 

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

어떻게 방법을 av ActionView::Helpers::FormBuilder에 ailable?

RailsJsonField::ActionView::Helpers::FormBuilder 

당신은 다음 클래스 monkeypatch 의미 :

답변

1

당신은 다음 클래스 정의

ActionView::Helpers::FormBuilder 

오류 메시지가 방법이 정의되지 말하는 이유입니다; 당신은하지 않고 지정된 클래스 내에서, 사용자 정의 모듈 내에서 클래스 내에서 그것을 정의 :

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

그것은 단지 RailsJsonField::ActionView::Helpers::FormBuilder에 정의 된, 그래서 위의 오류가 발생합니다. 제대로 한 다음 확인하기 위해 원래의 코드를 살펴 봐야 원래의 코드를 monkeypatch하려면

당신의 코드 보인다 their code 같은 :

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

그것의 초기화로이 정의하는 더 나은 것 당신의 레일 애플 리케이션, 예 : config/initializers/json_field_tag.rb. 간단한 패치로 작업 한 코드를 얻은 후에는 ActionView을 향상시키는 독립 실행 형 보석으로 개발하는 데 집중할 수 있습니다.

+0

감사를 회신합니다. 나는 이니셜 라이저로 작업 할 수 있지만 같은 코드가 보석에서 작동하지 않는다. (질문에 포함 된 오류가 발생한다.) 문제를 디버깅 할 수있는 방법이나 보석의 코드를 초기화하는 적절한 방법에 대한 아이디어가 있습니까? 질문에서 코드를 업데이트했습니다. – dyeje

관련 문제