2010-02-02 113 views
2

所以我是Rails的新手,我試圖找出添加自定義表單元素的規範方法。目前我做這件事的方式非常糟糕。Rails中的自定義表單元素

module ActionView 
    module Helpers 
    module FormOptionsHelper 
     def some_new_field(object, method, options = {}, html_options = {}) 
      #code code 
     end 
    end 
    class FormBuilder 
     def contract_year_select(method, options = {}, html_options = {}) 
     @template.some_new_field(@object_name, method, objectify_options(options), @default_options.merge(html_options)) 
     end 
    end 
    end 
end 

然而我看到了這個。

class Forms::ApplicationFormBuilder < ActionView::Helpers::FormBuilder 
    Forms::ApplicationHelper.instance_methods.each do |selector| 
    src = <<-end_src 
     def #{selector}(method, options = {}) 
     @template.send(#{selector.inspect}, @object_name, method, objectify_options(options)) 
     end 
    end_src 
    class_eval src, __FILE__, __LINE__ 
    end 

    private 

    def objectify_options(options) 
    @default_options.merge(options.merge(:object => @object)) 
    end 
end 

(從here

擴展FormBuilder好像比鴨更好的解決方案衝壓它。有沒有其他的方式來做到這一點,不需要直接將FormBuilder類的一部分複製到我的自定義類中?

+1

我第一次看到術語鴨子打孔。我喜歡它! – 2010-02-02 18:44:22

+3

來自Patrick Ewing的一句名言:「那麼,我剛剛完全被亞當賣出,這個想法是,如果它像鴨子一樣走路,像鴨子一樣說話,它就是一隻鴨子,對吧?所以如果這隻鴨子沒有給你你想要的噪音,你必須打鴨子,直到它恢復你的期望。「 – baudtack 2010-02-02 20:33:09

回答

0

兩個舞伴在這裏:

首先,人新的軌道,我會建議使用Formtastic寶石。 V是rails中被濫用和忽略的MVC部分。

Formtastic是很好的測試,並已爲Rails 3

https://github.com/justinfrench/formtastic

隨着Formtastic然後你可以創建擴展它的輝煌類自定義元素,並獲得超越了簡單的現場展示其他好處一大堆的支持。

二,延伸課堂是絕對可以接受的。我更喜歡Module方法,因爲它更容易看。就像沿着線的東西:

module Forms::ApplicationFormBuilder 
class WhateverYourExtending 
    def some_special_method(stuff) 
    # all kinds of special stuff here 
    end 
end 
end 

但我幾乎知道我在這裏談論......這東西是正確的我的理解邊緣。

剛纔看到你在談論表格,我喜歡Formtastic!