2016-04-21 59 views
1

我想爲我的應用程序創建一個包裝,但不同類型的html應該是不同的。所以,我可以只寫如何爲simple_form gem中的類型創建包裝?

= simple_for_for @task, wrapper: :mine_special do |f| 
    = f.input :first_attr, type: :sring 
    = f.input :second_attr, type: :boolean 

所以,我的初始化程序將包含兩個string & boolean類型定義:

config.wrappers :mine_special, types: [:boolean] do |b| 
    # configs here for check box 
end 

config.wrappers :mine_special, types: [:string] do |b| 
    # configs here for text field 
end 

我怎麼能這樣做?

回答

0

總之

我能想到的只是命名你的包裝不同的最佳解決方案:

config.wrappers :mine_special_boolean 
config.wrappers :mine_special_string 

它很好地遵循simple_form語義,也無需記住傳遞type選項。

說明

通過你逝去wrapper: :mine_special選擇模板的時候,簡單的形式初始化代碼已經運行,所以你不能簡單地如果包裝塊語句插入。當您從模板調用包裝器時,它會將您的選項與您在初始化器中定義的選項合併。

我可以想象一種方法來重寫SimpleForm::FormBuilder中的一些方法,以根據您傳入的type選項路由包裝器調用,但那時我可能會想知道它是否值得複雜。