我刚刚开始使用rails gems,并想知道如何最好地为现有的rails模块添加功能。例如,如果我想添加一个新的表单助手,我通常会这样做:
class ActionView::Helpers::FormBuilder
# My form defs in here
end
但是我想知道这是否是最优雅的做事方式 - 特别是例如,如果我要将新功能包装在一个宝石中。
例如,假设我正在创建gem" MyGem",并且我只希望在控制器中调用gem时它的功能存在。所以在控制器中我添加了包含MyGem',在lib / my_gem.rb中,我通常会执行以下操作:
# lib/my_gem.rb
module MyGem
# My form defs in here
end
问题是:从MyGem模块中覆盖ActionView :: Helpers :: FormBuilder模块中的defs的标准方法是什么?
干杯...
答案 0 :(得分:2)
如果创建一个继承为ActionView::Helpers::FormBuilder
的类,则可以覆盖所需的FormBuilder中的所有方法。
您也可以添加其他方法。
在您使用选项:builder
创建表单时只需要使用此FormBuilder或者您可以使用simple_form_for
之类的辅助方法来调用构建器的form_for
方法。
如果你想在一个模块中做,你需要在模块
中创建你的类# lib/my_gem.rb
require 'my_gem/form_builder'
# lib/my_gem/form_builder.rb
module MyGem
class FormBuilder < ActionView::Helpers::FormBuilder
# form def
end
end
在您的构建器中,您使用:builder => MyGem::FormBuilder