创建一个添加 rails 表单助手的 Gem
Creating a Gem that adds a rails form helper
我正在创建一个 gem 来为 rails 表单添加一个新的辅助方法。我的 gem 是一个文件
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
上可用?
您定义了以下内容class:
RailsJsonField::ActionView::Helpers::FormBuilder
您打算对以下内容进行 monkeypatch class:
ActionView::Helpers::FormBuilder
这就是错误消息告诉您方法未定义的原因;您在自定义模块中的 class 中定义了它,而不是在指定的 class:
中
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
最好将其定义为 Rails 应用程序中的初始值设定项,例如 config/initializers/json_field_tag.rb
。一旦你的代码作为一个简单的补丁工作,你就可以专注于将它开发成一个独立的 gem 来增强 ActionView
.
经过搜索,我发现了一个不同的 gem 添加了一个 FormBuilder 方法。我使用他们的回购协议作为构建我自己的回购协议的指南。对于其他有此问题的人,您可以分别在此处查看我的 repo 和他们的 repo:
我正在创建一个 gem 来为 rails 表单添加一个新的辅助方法。我的 gem 是一个文件
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
上可用?
您定义了以下内容class:
RailsJsonField::ActionView::Helpers::FormBuilder
您打算对以下内容进行 monkeypatch class:
ActionView::Helpers::FormBuilder
这就是错误消息告诉您方法未定义的原因;您在自定义模块中的 class 中定义了它,而不是在指定的 class:
中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
最好将其定义为 Rails 应用程序中的初始值设定项,例如 config/initializers/json_field_tag.rb
。一旦你的代码作为一个简单的补丁工作,你就可以专注于将它开发成一个独立的 gem 来增强 ActionView
.
经过搜索,我发现了一个不同的 gem 添加了一个 FormBuilder 方法。我使用他们的回购协议作为构建我自己的回购协议的指南。对于其他有此问题的人,您可以分别在此处查看我的 repo 和他们的 repo: