Builder クラスは、次のように、モジュール定義の内側または外側のモジュール ファイルに配置できます。
# app/helpers/events_helper.rb
module EventsHelper
...
class FormBuilderIn < ActionView::Helpers::FormBuilder
...
end
end
class FormBuilderOut < ActionView::Helpers::FormBuilder
...
end
ビルダーをフォームにアタッチする適切な方法は次のとおりです。
# app/views/events/_form_in.html.erb
form_for @event, :builder => EventsHelper::FormBuilderIn do |f|
# app/views/events/_form_out.html.erb
form_for @event, :builder => FormBuilderOut do |f|
フォームにビルダー オプションを設定するためのヘルパー メソッドを次に示します。
# app/helpers/events_helper.rb
module EventsHelper
def form_in_for(data, *args, &proc)
options = args.extract_options!
form_for(data, *(args << options.merge(:builder => EventsHelper::FormBuilderIn)), &proc)
end
def form_out_for(data, *args, &proc)
options = args.extract_options!
form_for(data, *(args << options.merge(:builder => FormBuilderOut)), &proc)
end
end
...
現在、ビルダーをフォームにアタッチするオプションの方法があります。
# app/views/events/_form_in.html.erb
form_in_for @event do |f|
# app/views/events/_form_out.html.erb
form_out_for @event do |f|
最後に、カスタム ビルダーを別のフォルダー ("app/builders" など) に配置できますが、このパスをアプリケーション環境に手動で追加する必要があります。Rails 2.3.x の場合は、次のように設定します。
# config/environment.rb.
config.load_paths += %W( #{RAILS_ROOT}/app/builders )