编写Rails Gems:添加到现有rails模块的正确方法?

时间:2012-03-21 08:54:14

标签: ruby-on-rails ruby gem

我刚刚开始使用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的标准方法是什么?

干杯...

1 个答案:

答案 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