У меня есть пользовательский вид строителя в моем проекте, используя следующий код в инициализаторе:Рубин на Rails пользовательского FormBuilder переопределить text_field
class CustomFormBuilder < ActionView::Helpers::FormBuilder
def submit(label, *args)
options = args.extract_options!
new_class = options[:class] || "btn"
super(label, *(args << options.merge(:class => new_class)))
end
def text_field(label, *args)
options = args.extract_options!
new_class = options[:class] || "textbox"
super(label, *(args << options.merge(:class => new_class)))
end
end
# Set CustomBuilder as default FormBuilder
ActionView::Base.default_form_builder = CustomFormBuilder
представить определение работы и добавляет класс БТН представить материалы , однако определение text_field не работает, поскольку класс textbox не добавляется к текстовым вводам.
Посмотрев на documentation для FormBuilder я заметил, что представить перечислен как метод, а text_field нет. Мне нужно выяснить, как правильно переопределить метод text_field, используемый при создании форм с использованием form_for. Если это помогает, я использую Ruby 2.0.0 и Rails 3.2.13. Также я посмотрел пример here, который показывает метод text_field в пользовательском классе FormBuilder, поэтому я задаюсь вопросом, был ли этот метод удален в Rails 3 из FormBuilder и помещен куда-то еще. Любое понимание того, как достичь этого, будет с благодарностью оценено.
Ниже мое решение(на основе информации, предоставленной PinnyM):
class CustomFormBuilder < ActionView::Helpers::FormBuilder
def submit(label, *args)
options = args.extract_options!
options[:class] = "btn" if !options[:class].present?
super(label, *(args << options))
end
def self.create_tagged_field(method_name)
case method_name
when 'text_field'
define_method(method_name) do |name, *args|
options = args.extract_options!
options[:class] = "textbox" if !options[:class].present?
super(name, *(args << options))
end
end
end
field_helpers.each do |name|
create_tagged_field(name)
end
end