Ruby on rails Rails中的自定义表单元素

Ruby on rails Rails中的自定义表单元素,ruby-on-rails,monkeypatching,Ruby On Rails,Monkeypatching,因此,我是Rails的新手,我正在尝试找出添加自定义表单元素的规范方法是什么。目前我做这件事的方式非常糟糕 module ActionView module Helpers module FormOptionsHelper def some_new_field(object, method, options = {}, html_options = {}) #code code end end class FormBuild

因此,我是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
class Forms::ApplicationFormBuilder
首先,作为rails的新手,我建议使用Formtastic gem。
V是rails中被滥用和忽视的MVC部分

Formtastic经过了很好的测试,并支持Rails 3

使用Formtastic,您可以创建自定义元素来扩展它的brilliant类,并获得除简单的字段显示之外的所有其他好处

第二,扩大课程范围是绝对可以接受的。我更喜欢模块方法,因为它更容易查看。比如说:

module Forms::ApplicationFormBuilder
 class WhateverYourExtending
  def some_special_method(stuff)
   # all kinds of special stuff here
  end
 end
end
但我几乎不知道我在说什么。。。这东西就在我理解的边缘

刚才看到你在谈论表单,我喜欢Formtastic

这里有两个部分:

首先,作为rails的新手,我建议使用Formtastic gem。 V是rails中被滥用和忽视的MVC部分

Formtastic经过了很好的测试,并支持Rails 3

使用Formtastic,您可以创建自定义元素来扩展它的brilliant类,并获得除简单的字段显示之外的所有其他好处

第二,扩大课程范围是绝对可以接受的。我更喜欢模块方法,因为它更容易查看。比如说:

module Forms::ApplicationFormBuilder
 class WhateverYourExtending
  def some_special_method(stuff)
   # all kinds of special stuff here
  end
 end
end
但我几乎不知道我在说什么。。。这东西就在我理解的边缘


刚才看到你在谈论表单,我喜欢Formtastic

我第一次看到鸭子出击这个词。我喜欢!来自帕特里克·尤因(Patrick Ewing)的一句话:“嗯,我完全被亚当说服了,这个想法是,如果它走路像鸭子,说话像鸭子,那它就是鸭子,对吧?所以如果这只鸭子没有给你你想要的噪音,你就必须打那只鸭子,直到它恢复你所期望的。”我第一次看到鸭子出击这个词。我喜欢!来自帕特里克·尤因(Patrick Ewing)的一句话:“嗯,我完全被亚当说服了,这个想法是,如果它走路像鸭子,说话像鸭子,那它就是鸭子,对吧?所以如果这只鸭子没有给你你想要的噪音,你就必须打那只鸭子,直到它恢复你所期望的。”