2010-03-11 29 views
5

Modüller adlı öğelerin listesini görüntüleyen bir raylar uygulamasına sahibim. Bunları yineliyorum, her biri için bir remote_form_for çağrı içeren bir kısmi render yapıyorum.Aynı sayfada birden çok remote_form_for yinelenen kimliklere neden oluyor

Bu, tüm çalışır, ancak form metin alanlarının hepsinin aynı kimliğe sahip olması nedeniyle HTML doğrulaması başarısız olur.

Formda bir önek seçeneği var mı (ya da başka bir şey) Bunu aşmak için kullanabilir miyim?
(bazı kod)

//_module_form.html.erb 
    <% remote_form_for app_module do |f| %> 
     <%= f.label :name %> 
     <%= f.text_field :name %> 
     <%= submit_tag 'Save' %> 
    <%end %> 

    //parent page 
    <% @thing.modules.each do |app_module| %> 
     <%= render :partial => "module_form", :locals => { :app_module => app_module } %> 
    <% end %> 
Yani

Ben koleksiyonunda 1'den fazla öğe varsa, ben aynı sayfada aynı formu ve form kimliği ve metin kutusu id hale çoğaltılır: Güncelleme

.

Form kimliği kolayca özelleştirilebilir, ancak denetleyici belirli adlandırılmış denetimleri aradığı için text_box hakkında ne olur? Daha sonra yerel bir değişkene kısmi geçiş işlemek üzerinde collection.each_with_index do |item, i| ile üzerlerinden

+0

Biz – shingara

+0

kodunuzu sorgulamaya ekleyebilir miyim anlamak için bazı kod gerekir: Burada

bu alanları oluşturulması için bir jenerik yardımcı kullandığımız kodudur? – klew

+0

Bazı kod eklendi. Yinelenen form kimliğimi adresleyen –

cevap

2

Ekle Formunuzu oluştururken seçenekler karma :index => object.id. Bu, denetleyiciye müdahale etmeden object_id_attribute şeklinde kimlikler üretmelidir.

:index ilişkin belgeler olduğu

Düzenleme muğlak yanıltıcı. :index form gönderiminde bir etkisi vardır. Çözüm, her alan için :id özniteliğini belirtmektir. Bu, name'u boş bırakılan id özelliğini değiştirecektir (gönderim için geçerli olan).

def create_field(f, field_type, object, field_name) 
    field_id = "#{object.class.name.downcase}_#{object.id.to_s}_#{field_name.to_s}" 
    f.send(field_type, field_name, :id => field_id) 
end 
1

Bıkmadan:

render :partial => "some_partial", :locals => {:form_id => "form_id_#{i}"} 

Sonra kısmi olarak size <%= form_id %>

erişebilirler bunu yapmanın bir yolu olurdu. Ben remote_form_for içinde farz ediyorum

İçinde geçirebilirsiniz: id => form_id ya: html_options => {: id => form_id} Eğer görebilirsiniz gibi

görünüyor: http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M001649

+0

, ancak metin kutusu kimlikleri hakkında ne? –

+0

text_field yardımcısındaki kimliği ileterek, id numarasını text_field içinde benzer bir şekilde ayarlayabilirsiniz. Giriş alanlarındaki isim niteliği, form yardımcısı tarafından her zaman yapılmalıdır. Neden böyle bir şey kullanmayın: id => "app_module _ # {app_module.id} _name" – tsdbrown

+0

Bunu yaparsam, denetleyicim artık düzgün çalışmıyor, çünkü bu, yayınlanmış olan paramları anlamıyor. –

İlgili konular