2010-01-24 12 views
5

Ive ha creato un editor carino in jQuery e desidero aggiungerlo come metodo di aiuto per i moduli.Aggiungi un metodo di helper modulo

come farei per creare un nuovo metodo di supporto per la forma?

idealmente id piace essere in grado di chiamare:

f.nice_editor :field 
+0

Potete fornire ulteriori dettagli? Vuoi essere in grado di fare qualcosa come "f.nice_editor: foo" all'interno di un "form_for @foo do | f |" bloccare? – Eli

+0

Sì, questo è quello che sto cercando. – Arcath

risposta

6

L'oggetto ceduto a form_for è un'istanza di ActionView::Helpers::FormBuilder. Quindi tutto ciò che devi fare è aggiungere lì i metodi di istanza.

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

dopo alcune ricerche ho scoperto che questo funziona:

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

"conf" avrebbe tutte le opzioni dei simboli passati dal vista. funziona bene con f.

9

Parte della domanda è: dove inserisci il codice nice_editor? Non penso che sia una buona idea modificare direttamente la classe ActionView :: Helpers :: FormBuilder nella tua installazione. Invece, metti il ​​tuo codice in uno dei file in app/helper. Esistono diversi modi per aggiungere metodi di estensione a FormBuilder.

Per esempio, supponiamo di avere un file helper 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 

Inoltre, vedere questo good discussion, che mostra come utilizzare self.included() per estendere FormBuilder.

Problemi correlati