2

だから私は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 クラスの一部をカスタム クラスに直接コピーする必要のない、これを行う他の方法はありますか?

4

1 に答える 1

0

ここで 2 つのパートナー:

まず、Rails の初心者として、Formtastic gem の使用をお勧めします。V はレールで 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 が大好きです!

于 2010-12-30T06:19:20.027 に答える