2010-01-24 18 views
5

He hecho un buen editor en jQuery y quiero agregarlo como un método de ayuda de formulario.Agregue un método de ayuda de formulario

¿cómo hago para crear un nuevo método de ayudante de formularios?

idealmente Identificación gustaría ser capaz de llamar a:

f.nice_editor :field 
+0

¿Puede proporcionarnos más detalles? ¿Desea poder hacer algo como "f.nice_editor: foo" dentro de un "form_for @foo do | f |" ¿bloquear? – Eli

+0

Sí, eso es lo que estoy buscando. – Arcath

Respuesta

6

El objeto cedido a form_for es una instancia de ActionView::Helpers::FormBuilder. Entonces, todo lo que tienes que hacer es agregar métodos de instancia allí.

class ActionView::Helpers::FormBuilder 
    def custom_field(...) 
    ... 
    end 
end 
1

después de algunas investigaciones he encontrado que esto funciona:

class ActionView::Helpers::FormBuilder 
    def nice_editor(conf) 
     #stuff to draw the editor 
    end 
end 

"conf" tendría todas las opciones de símbolos que se le pasan por la ver. funciona bien con f.

9

Parte de la pregunta es: ¿dónde colocas el código nice_editor? No creo que sea una buena idea editar directamente la clase ActionView :: Helpers :: FormBuilder en su instalación. En su lugar, coloque su código en uno de los archivos en la aplicación/ayudantes. Hay varias formas de agregar métodos de extensión a FormBuilder.

Por ejemplo, suponga que tiene un archivo de ayuda items_helper.rb:

module ItemsHelper 
    # this is one way to define new instance methods 
    ActionView::Helpers::FormBuilder.class_eval do 
     def nice_editor(conf,*opts) 
      ... 
     end 
    end 
end 

También, ver este good discussion, que muestra cómo utilizar self.included() para extender FormBuilder.

Cuestiones relacionadas