だから私は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
(ここから)
FormBuilder を拡張することは、ダックパンチするよりも優れたソリューションのようです。FormBuilder クラスの一部をカスタム クラスに直接コピーする必要のない、これを行う他の方法はありますか?