2012-03-21 41 views
1

我剛開始使用rails gems,想知道如何最好地爲現有的rails模塊添加功能。例如,如果我想添加一個新的形式幫助,我通常做這樣的事情:Writing Rails Gems:添加到現有導軌模塊的正確方法?

class ActionView::Helpers::FormBuilder 
    # My form defs in here 
end 

但我想如果這是做事的最優雅的方式 - 特別是如果,例如,我將把新功能包裝在一個gem中。

例如,假設我正在創建gem「MyGem」,並且我只希望其功能在控制器中調用gem時存在。所以我添加了控制器包括MyGem「,並在lib/my_gem.rb我通常做類似:

# lib/my_gem.rb 
module MyGem 
    # My form defs in here 
end 

的問題是:什麼是覆蓋在DEFS的ActionView的標準方式: :Helpers :: MyGem模塊中的FormBuilder模塊?

乾杯......

回答

2

如果創建的ActionView::Helpers::FormBuilder繼承一個類你可以覆蓋從FormBuilder你想要的所有方法。

也可以添加其他方法。

後,您只需要在您創建表格選項:builder或者你可以像simple_form_for的helper方法來調用form_for方法與製造商使用此FormBuilder。

如果你想在一個模塊中你需要創建模塊

# 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

+0

喜shingara - 感謝您的快速反應。從類FormBuilder等類繼承,但在諸如(例如)ActionView :: Helpers :: FormHelper,其中方法不包含在類中的模塊,我得到好舊的「錯誤的參數類型模塊(預期類)「。這是什麼最初扔了我 - 也許我的問題是如何從模塊中的方法繼承沒有類? – PlankTon 2012-03-21 09:12:14

+0

PS:只是爲了搶先:有興趣:: FormHelper爲了修改'form_for'的目的。我知道內部構建者應該在:: FormBuilder中進行修改。 ;-) – PlankTon 2012-03-21 09:14:56

+0

您需要在模塊中創建您的課程我更新答案 – shingara 2012-03-21 09:15:23

相關問題