2012-08-08 14 views
7

रेल एक आंशिक रूप से उत्पन्न करते हैं जिसका उपयोग एक क्रिया द्वारा प्रदान किए गए दोनों पृष्ठ और एक नई कार्रवाई द्वारा प्रदान किए गए पृष्ठ पर किया जा सकता है। यदि यह पूर्व है तो फॉर्म की विधि PUT पर सेट की गई है, यदि बाद वाले फॉर्म की कार्रवाई पोस्ट पर सेट की गई है।रेल कैसे PUT या POST की विधि के साथ फ़ॉर्म प्रस्तुत करने का निर्णय लेते हैं?

रेल कैसे तय करते हैं कि किस विधि का उपयोग करना है?

उत्तर

12

अगर वस्तु फार्म के लिए पारित कर दिया persisted? है, प्रपत्र बिल्डर को पता है कि आप कर रहे हैं:

action, method = object.respond_to?(:persisted?) && object.persisted? ? [:edit, :put] : [:new, :post] 

और ActiveRecord के लिए persisted? के रूप में घोषित किया जाता है ऑब्जेक्ट को अपडेट करना और इसलिए PUT एक्शन प्रस्तुत करना होगा। यदि यह जारी नहीं है, तो यह जानता है कि आप एक नई वस्तु बना रहे हैं और यह POST का उपयोग करेगा।

<%= form_for @user do |f| %> 
    <%= f.button %> 
<% end %> 

तो @user एक नया रिकार्ड है, POST प्रयोग किया जाता है और बटन लेबल Create User हो जाता है, अन्यथा PUT प्रयोग किया जाता है और लेबल Update User हो जाता है। इसके लिए और कुछ नहीं है।

+0

धन्यवाद। मैं create_at का उपयोग करके समाप्त हुआ, क्योंकि मैं क्लाइंट-साइड जेएस के साथ अपने मॉडल तक पहुंच रहा था, @Model गॉन द्वारा हैश के रूप में उजागर हुआ। तो मुझे काम करने के लिए केवल गुणों के साथ छोड़ दिया गया था। – Undistraction

3

मौजूदा संसाधनों को संपादित करने वाले फॉर्म PUT का उपयोग करते हैं, जो एक नया संसाधन उपयोग POST बनाते हैं। आरईएसटी मानकों के अनुसार here वर्णित है।

रेल form_for सहायक कोड से:

!(new_record? || destroyed?) 
+0

मेरा सवाल यह था कि रेल कैसे तय करता है कि फ़ॉर्म पर कौन सी विधि सेट करना है। यह तय करने के लिए क्या उपयोग कर रहा है? – Undistraction

+0

अपडेट किया गया, क्या आप चाहते थे? – PinnyM

+0

धन्यवाद। डर @ hgmnz हालांकि आप पंच को हराया। – Undistraction