我正在创建一个gem来为rails表单添加一个新的辅助方法。我的宝石是单个文件
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>)
如何在ActionView::Helpers::FormBuilder
上提供该方法?
答案 0 :(得分:1)
您已定义以下类:
RailsJsonField::ActionView::Helpers::FormBuilder
你的意思是monkeypatch以下类:
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
的独立gem。
答案 1 :(得分:0)
搜索之后,我找到了一个不同的宝石,它添加了一个FormBuilder方法。我用他们的回购作为指导我自己的结构。对于有这个问题的其他人,您可以分别在这里查看我的回购及其回购: