2011-08-11 19 views
6

मेरे पास वर्तमान में कुछ रूप हैं जो मैं उस बटन को बदलने की कोशिश कर रहा हूं जो इसे संपादित करता है अगर मैं संपादन या नई कार्रवाई पर हूं। मेरे पास दो रूपों का निर्माण हुआ था, लेकिन यह खराब हो गया, और अब मैं सिर्फ एक ही आंशिक आंशिक उपयोग कर रहा हूं।रेल 3 - फॉर्म, कस्टम सबमिट बटन कार्रवाई के आधार पर?

मेरी आंशिक के अंत में, मैं अपने रूपों के अंत में कुछ इस तरह है:

<p> 
    <% if controller.action_name == 'new' %> 
    <%= f.submit "Create", :class => "pink_button"%> or 
    <% elsif controller.action_name == 'edit' %> 
    <%= f.submit "Update", :class => "pink_button"%> or 
    <% end %> 
    <%= link_to "cancel", :back %> 
    </p> 

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

def update 
    @list = current_user.lists.find(params[:id])  

    if @list.update_attributes(params[:list]) 
     redirect_to list_path(@list), :notice => "List '#{@list.name}' updated." 
    else 
     render :action => 'edit' 
    end 
    end 

तो प्रपत्र बस फिर से प्रदान की गई है:

मेरी नियंत्रक में, मैं चीजें हैं जो इतना तरह असफल है पकड़ने कर रहा हूँ। समस्या यह है कि, मैं अब संपादन पथ पर नहीं हूं। इसका मतलब है, मेरा फॉर्म बटन अब और प्रदर्शित नहीं होता है।

क्या मैं ऐसा करने का प्रयास कर रहा हूं?

धन्यवाद

उत्तर

14

हाँ, यह डिफ़ॉल्ट रूप से i18n साथ रेल में नियंत्रित किया जाता है। अनुवाद ActionView में हैं, और इस तरह दिखेगा:

en: 
    helpers: 
    select: 
     # Default value for :prompt => true in FormOptionsHelper 
     prompt: "Please select" 

    # Default translation keys for submit FormHelper 
    submit: 
     create: 'Create %{model}' 
     update: 'Update %{model}' 
     submit: 'Save %{model}' 

तुम सब करने की ज़रूरत है f.submit है (गुजर "बनाएँ" या "संपादित करें", आदि) के बिना और अनुवाद के आराम करेंगे। आप उपरोक्त yaml को अपने स्थानीय लोकेशंस में छोड़कर इन्हें ओवरराइट कर सकते हैं।

यदि आपको कक्षा निर्धारित करने की आवश्यकता है तो आप शून्य पास कर सकते हैं, उदा। f.submit nil, :class => 'whatev'

13

रेल तरीका अगर रिकॉर्ड नया है या नहीं की जाँच करने के लिए है:

@list.new_record? ? "Create" : "Update" 
+2

धन्यवाद समीर! मैंने आपके सुझाव का उपयोग इस प्रकार किया: <% = f.submit @ chore.new_record? ? "अपने कोर को पोस्ट करें": "अपने कोर को अपडेट करें",: class => "marginTopBottom"%> –

0

रेल एक विधि persisted? निर्धारित करने के लिए एक वस्तु कायम गया है।

आप ERB का उपयोग कर रहे हैं, तो आप haml उपयोग कर रहे हैं

<%= f.submit (@list.persisted? ? 'Create' : 'Update) %> 

करते हैं, का उपयोग

= f.submit (@list.persisted? ? 'Create' : 'Update') 

अधिक के लिए, देखें http://apidock.com/rails/ActiveRecord/Persistence/persisted%3F

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