2010-01-21 22 views
6

Ho un builder di moduli personalizzato e uno dei motivi per cui questo builder personalizzato è che per ogni modulo, ho bisogno di includere alcuni parametri aggiuntivi che non voglio mettere esplicitamente in tag di campo nascosti in ogni forma che scrivo.Campi aggiuntivi con builder personalizzati di rotaie

for_for(@foo, :builder => MyBuilder) do |f| 
    # stuff I shouldn't have to worry about 
    # this should be put in all the time without me having to do it 
    hidden_field_tag('extra', 'myextrainfo') 

    # normal things I would put in 
    f.text_field(:bar) 
end 

Cosa devo fare nella mia costruttore modulo personalizzato, o quello che posso ignorare o il metodo della catena di aggiungere alcune cose in più nascoste nella forma (senza giusta aggiunta di params URL)?

risposta

5

E 'stato un po' complicato (ragionevole nuovo a Ruby/Rails), ma ho trovato una soluzione. Inseriscilo in un file di supporto (o in un'altra posizione in base alle tue esigenze).

module ActionView::Helpers::FormHelper 
    def form_for_with_updated_code(record_or_name_or_array, *args, &proc) 
    form_for_without_updated_code(record_or_name_or_array, *args) { |f| 
     concat(hidden_field_tag('extra','info')) 
     proc.call(f) 
    } 
    end 
    alias_method_chain :form_for, :updated_code 
end 

Sostituisce il metodo form_for e aggiunge il campo nascosto. Si potrebbe aggiungere il codice per le opzioni personali aggiuntivi, ad esempio per riempire il campo nascosto (s), dal parametro *args utilizzando extract_options!.

+0

Very nice. Pieno di vittoria. Grazie! –

Problemi correlati