2010-01-21 13 views
6

Özel bir form oluşturucum var ve bu özel kurucunun nedenlerinden biri, her form için, açıkça koymak istemediğim bazı ekstra paramları içermem gerekiyor. yazdığım her formda gizli alan etiketleri.Özel raylar ile ekstra alanlar oluşturucu

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 

Ne benim özel form oluşturucu yapmak zorunda, yoksa ne geçersiz kılabilir veya yöntem zinciri (sadece URL params eklemeden) şeklinde bazı ekstra gizli şeyler eklenir?

cevap

5

Oldukça zordu (Ruby/Rails için yeni yeni), ama bir çözüm buldum. Bazı yardımcı dosyaya (veya ihtiyaçlarınıza bağlı olarak başka bir yere) koyun.

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 

Form_for yöntemini geçersiz kılar ve gizli alanınızı ekler. Ekstra kişisel seçeneklere kod ekleyebilirsiniz, örneğin extract_options! kullanarak *args parametresinden gizli alanları (alanları) doldurun.

+0

Çok hoş. Kazanç dolu. Teşekkürler! –