2010-11-08 4 views
5

का उपयोग करता है, मैं अपने पहले रेल ऐप (रेल 3 का उपयोग करके) के साथ अच्छी प्रगति कर रहा हूं। एमवीसी इंटरैक्शन ठीक चल रहा है, लेकिन मुझे ऐसे फॉर्म में कठिनाई हो रही है जो सीधे मॉडल से संबंधित नहीं है।रेल: गैर-मॉडल फॉर्म की सामग्री को पुनर्स्थापित करना जो form_tag

मैं form_tag का उपयोग कर रहा हूं, और सफलता के मामले में, सब कुछ ठीक व्यवहार करता है। हालांकि, त्रुटियों का प्रबंधन कुछ हद तक असभ्य है। वास्तविक त्रुटि संदेश फ्लैश में संग्रहीत होता है और लेआउट/application.html द्वारा ठीक प्रदर्शित होता है, लेकिन मुझे वास्तव में यह पसंद आएगा यदि फ़ॉर्म उस सामग्री को याद रख सकता है जिसे उपयोगकर्ता ने भर दिया था। लेकिन यह नहीं है: सभी फ़ील्ड अपने डिफ़ॉल्ट मानों पर रीसेट करें।

मुझे उन तरीकों से प्यार है जो ऑब्जेक्ट्स पर रीस्टफुल क्रियाओं के लिए फॉर्म स्वचालित रूप से उनके सबमिट किए गए मान याद करते हैं, और त्रुटियों में लाल रंग में हाइलाइट हो जाते हैं। मैं लाल हाइलाइट के बिना ठीक हूं, लेकिन मुझे वास्तव में यह पसंद आएगा अगर मैं फॉर्म के फ़ील्ड सबमिट किए गए मान रख सकूं।

क्या कोई सलाह दे सकता है कि यह कैसे करें? प्रासंगिक फ़ाइलों से

अंशः

विचारों/cardsets/import.html.erb:

<%= form_tag :action => :import_data, :id => @cardset do %> 
    ... 
    <%= text_field_tag "separator", "", :maxlength => 1 %> 
    ... 
    <%= text_field_tag "formatting_line" %> 
    ...etc (more fields) 

नियंत्रकों/cardsets_controller.rb:

# POST /cardsets/1/import_data 
def import_data 
    success, message = @cardset.import_data(params, current_user) 
    if success 
    redirect_to(@cardset, :notice => message) 
    else 
    flash.now[:error] = message 
    render :import 
    end 
end 

उत्तर

9

text_field_tag ​​से पीछे नहीं आर्ग है क्षेत्र में भरने के लिए मूल्य। कुछ इस तरह का प्रयास करें:

<%= text_field_tag "separator", params[:separator], :maxlength => 1 %> 
+0

महान काम किया! धन्यवाद! – AlexC

1

अपने क्षेत्र एक डिफ़ॉल्ट है, तो आप फार्म के लिए "शो" कार्रवाई से यह निर्धारित करना चाहते हैं जाएगा:

# GET 
def show_form 
    params[:key] = 'default' 
end 

# POST 
def validate_form_and_act 
    # Don't set it here to reuse what the user passed. 
end 

या सीधे टेम्पलेट पर (कम अच्छा क्योंकि एक || हर बार का उपयोग करता है और देखने के लिए और अधिक नियंत्रक डेटा कहते हैं):

<%= text_field_tag 'name', params[:key] || 'default' %> 
संबंधित मुद्दे