2011-11-10 12 views
6

रेल में यह क्या करता है?क्या बनाता है! रेल में मतलब है?

create! do |user| 
    #initialise user 
end 

मुझे लगा कि यह उपयोगकर्ता ऑब्जेक्ट बनाता है और इसे डेटाबेस में सहेजता है। यह user.new(...) और user.save() कहने से अलग कैसे है?

उत्तर

15

संक्षेप: बनाने! अपवाद उठाता है, ऑब्जेक्ट रिटर्न बनाता है (सहेजे गए ऑब्जेक्ट अगर यह सत्यापन पास नहीं करता है)। बचाना! त्रुटि बढ़ाता है, रिटर्न सच/गलत बचाता है। सहेजें गुण नहीं लेता है, बनाता है।

नया सहेजा नहीं जाता है। नया ActiveRecord संदर्भ में निर्माण के समान है। डेटाबेस को सहेजता है और मॉडल सत्यापन के आधार पर सत्य या गलत देता है। बनाएँ! डेटाबेस सत्यापन को बचाता है लेकिन मॉडल सत्यापन (या कोई अन्य त्रुटि) में त्रुटियों में अपवाद उठाता है।

+1

मैंने उछाल दिया क्योंकि यह एक अच्छा जवाब है। हालांकि, 'create' एक बूलियन वापस नहीं करता है। यह ऑब्जेक्ट इंस्टेंस देता है कि क्या यह सत्यापन पास हो गया है या नहीं। –

+0

@ आदित्यसंघी - आपके उत्तर के लिए धन्यवाद। आप कहते हैं: "बनाएँ! डेटाबेस को सहेजता है लेकिन मॉडल सत्यापन (या कोई अन्य त्रुटि) में त्रुटियों में अपवाद उठाता है।" --------> मान्यताओं को पारित नहीं होने पर यह डेटाबेस में कुछ भी कैसे सहेज सकता है? – BKSpurgeon

+1

@bkspurgeon अगर सत्यापन विफल रहता है तो यह सहेजता नहीं है। गैर-बैंग संस्करण की विफलता के मामले में बैंग विधि अलग-अलग व्यवहार करती है। बैंग संस्करण अपवाद उठाता है और गैर-बैंग संस्करण झूठा रिटर्न देता है। –

2

जब रिकॉर्ड बनाने के लिए विफल रहा है, create! चुपचाप एक अपवाद है, new और फिर save (या बस create विस्मयादिबोधक चिह्न के बिना) से बाहर निकलें फेंकता है।

-3

create विशेषताएँ लेता है, इसलिए यहां एक ब्लॉक का उपयोग कुछ असामान्य है। कोड आप का उल्लेख एक ब्लॉक में प्रारंभ कि create! को पारित कर दिया है क्या कर रहा है यह प्रिंसिपल में प्रारंभ के बाद new के रूप में ही है और फिर एक save!, बनाएं

कई रूपों बचाने के लिए, को बचाने के !, बनाने हैं है !, अद्यतन, अद्यतन !, आदि, वहाँ भी सत्यापन के मामले में बदलाव होते रहते हैं, और कॉल-पीठ

जानकारी के लिए एपीआई की जाँच करें: (यह पहली कड़ी में चर्चा की है)

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

http://apidock.com/rails/ActiveRecord/Base

http://m.onkey.org/active-record-query-interface

+1

थोड़ा गलत। बनाने बनाने /!/बचाने/बचाने! सब कुछ अलग हैं। बनाने/बनाने! मॉडल विशेषताओं ले लो। बचाने/बचाने! मॉडल विशेषता पैरामीटर में न लें। बैंग के साथ विधियां (बनाएं!/सहेजें!) बैकग्राउंड (बनाएं/सहेजें) के बिना सत्यापन विफलता और विधियों पर अपवाद बढ़ाएं। –

+0

भी बचाता है शून्य को वापस नहीं करता है, यह मान्यताओं का परिणाम देता है (सत्य या गलत)। –

+1

हास्यास्पद है। मैंने कभी नहीं कहा कि 'सेव' तर्क लेगा। मैंने प्रासंगिक दस्तावेज को इंगित किया - यह गलत कैसे है ?? – Tilo

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