I have a nested form with 3 related models. I want all the fields to be built by my custom form builder PanelFormBuilder. However only the form_for seems to be processed by my form builder and the fields_for doesn’t – it gets processed by the default one. I can’t for the life of me work out why.
This works:
<%= panel_form_for @firm do |f| %>
This doesn’t:
<%= panel_fields_for @firm.company do |c| %>
Here are the custom methods:
module ApplicationHelper
def panel_form_for(object, options = {}, &block)
options[:builder] = PanelFormBuilder
form_for(object, options, &block)
end
def panel_fields_for(object, options = {}, &block)
options[:builder] = PanelFormBuilder
fields_for(object, options, &block)
end
end
Here is the custom form builder
class PanelFormBuilder < ActionView::Helpers::FormBuilder
delegate :content_tag, :tag, to: :@template
%w[text_field text_area password_field].each do |method_name|
define_method(method_name) do |name, *args|
options = args.extract_options!
options.merge!(:class => "required")
super(name, *(args + [options]))
end
end
end
Can anyone tell me what I am doing wrong?
Thanks
Found my own answer. Turns out I should have been doing this:
Followed by:
I don’t need the
panel_fields_forat all.