2010-08-31 15 views
8

पर सत्यापन त्रुटि के बाद प्रस्तुत नहीं करता है मेरे पास एक नेस्टेड फॉर्म समस्या है। मैंने नेस्टेड फॉर्म समाधान को लागू किया है रेलवे के 1 9 6 & 1 9 7। यह काम करता है अगर मेरे पास कोई सत्यापन त्रुटियां नहीं हैं।रेल फ़ील्ड_for नेस्टेड फॉर्म

तो, घोंसला वाले फ़ील्ड (फ़ील्ड_for part में) सहित लोड होने पर पूरी तरह से प्रस्तुत किया जाता है।

लेकिन, फॉर्म में सत्यापन हैं। जब कोई सत्यापन विफल रहता है, नियंत्रक प्रस्तुत करता है: नया। फिर फॉर्म लिंक किए गए मॉडल फ़ील्ड को ठीक करता है, लेकिन नेस्टेड फ़ील्ड अब और प्रस्तुत नहीं किए जाते हैं। क्या इसका कोई समाधान है?

नियंत्रक

def new 
    @property = Property.new 
    @property.images.build 
    end 

    def create 
    @property = Property.new(params[:property]) 
    if @property.save 
     flash[:success] = t('Your_property') + ' ' + t('is_successfully_created') 
     redirect_to myimmonatie_url 
    else 
     render :action => 'new' 
    end 
    end 

दृश्य का हिस्सा:

<% form_for :property, @property, :url => { :action => "create" }, :html => { :multipart => true } do |f| %> 
    <div id="new-property-form-spannedcols"> 
     <div class="formField inptRequired"> 
     <%= f.label :postal_code, t("Postal_code") %> 
     <%= f.text_field :postal_code, :class => 'inptMedium short' %> 
     </div> 
     <div id="city_row" class="formField inptRequired"> 
     <%= f.label :city, t("City") %> 
     <div id="city_cell"> 
      <%= render :partial => 'ajax/cities', :locals => { :postal_code => @property.postal_code } %> 
     </div> 
     </div> 

     ... 

     <% f.fields_for :images do |builder| %> 
     <div class="formField"> 
      <%= builder.label :photo, t("Photo_path_max_3mb") %> 
      <%= builder.file_field :photo, :class => 'inptMedium' %> 
      <%= builder.hidden_field :order, :value => "1" %> 
     </div> 
     <% end %> 
    </div> <!-- /new-property-form-spannedcols --> 
    <div class="formBtn"> 
    <%= f.submit t("Save"), :class => 'btnMedium bg-img-home' %>&nbsp; 
    </div> <!-- /formBtn --> 
<%- end -%> 

उत्तर

12

यह एक त्रुटि फेंक करता है?

मेरा अनुमान है कि आपकी समस्या यह है कि आपकी new कार्रवाई में, आप @property.images.build कर रहे हैं, जो आपकी संपादन कार्रवाई में नहीं है। जब सत्यापन विफल हो जाता है, तो यह आपकी नई कार्रवाई प्रदान करेगा, लेकिन आपकी नई कार्रवाई नहीं करेगा। आप की तरह अपने create कार्रवाई का किसी और खंड में @property.images.build डालने की कोशिश कर सकते:

else 
    @property.images.build 
    render :action => 'new' 
end 

नहीं स्पष्ट तरीका यह करने के लिए, किसी भी तरह से है, लेकिन यह मदद मिलेगी ट्रैक है कि अगर आपकी समस्या है।

+0

हाय, यह कोई त्रुटि नहीं फेंकता है, यह सिर्फ प्रस्तुत नहीं किया गया है, लॉग में कोई त्रुटि भी नहीं है। और हाँ, आपका समाधान काम करता है! :) धन्यवाद –

1

मुझे इस व्यवहार के साथ भी यही समस्या थी। चूंकि मैं आपका मॉडल नहीं देख सकता, मेरा अनुमान है कि आपके पास है: अस्वीकार_if =>: all_blank या कुछ अन्य lambda। यह अपराधी प्रतीत होता है, हालांकि मेरे पास कोई फिक्स नहीं है। मैं इसे जवाब के बजाय टिप्पणी के रूप में छोड़ दूंगा, लेकिन स्पष्ट रूप से मेरे पास ऐसी चीज करने के लिए पर्याप्त प्रतिष्ठा नहीं है।

1

इस पल में, मुझे यह तय करने का एकमात्र तरीका यह है कि यह केवल विधि विधि को ओवरराइट कर रहा था।

def new 
    @property = Property.new 
    @property.images.build 
    end 

    def create 
    @property = Property.new(params[:property]) 
    if @property.save 
     flash[:success] = t('Your_property') + ' ' + t('is_successfully_created') 
     redirect_to myimmonatie_url 
    else 
     @property.images.build if @property.images.blank? ##because i'm shure you have something similar to : accepts_nested_attributes_for :images,  :reject_if => lambda { |fields| fields[:image].blank? } 
     render :action => 'new' 
    end 
    end 

उम्मीद है कि यह मदद करता है!

संबंधित मुद्दे