/ / कैसे "if @ record.save" एक रिकॉर्ड सहेजता है? - रूबी-ऑन-रेल, रूबी

लाइन "if @ record.save" रिकॉर्ड कैसे सहेजती है? - रूबी-ऑन-रेल, रूबी

मैं हमेशा इस धारणा के तहत रहा हूं कि एक रिकॉर्ड बनाने और बचाने के लिए, आपको दौड़ना होगा record.new तथा record.save, या record.create.

मैंने कभी नहीं समझा कि इस कोड में रिकॉर्ड कैसे सहेजा जाता है:

def create
@record = Record.new(record_params)
if @record.save
#do stuff
end
end

मैंने हटा दिया if लाइन और रिकॉर्ड सहेजा जा रहा है। मैंने सोचा if बयान सिर्फ परीक्षण की स्थिति, या वे भी कार्रवाई कर सकते हैं?

उत्तर:

जवाब के लिए 2 № 1

प्रक्रिया save विधि कहे जाने के बाद सही या गलत रिटर्न। चरण 1, मॉडल को बचाने की कोशिश करता है। यदि यह सहेजता है, तो रिकॉर्ड सहेजा जाता है और चरण 2, यह सच है। यदि यह सहेजता नहीं है, तो विधि गलत है। यदि आपका कथन नियंत्रित करता है कि प्रत्येक स्थिति के लिए क्या किया जाए।

if @model.save
end

जवाब के लिए 3 № 2

मैंने सोचा कि अगर बयानों ने सिर्फ स्थितियों का परीक्षण किया, या वे प्रदर्शन कर सकते हैं क्रियाएँ भी?

रूबी में, अभिव्यक्ति का मूल्यांकन या तो सत्य या गलत मूल्य देता है, और यह कोई बात नहीं, क्या अभिव्यक्ति ही है।

अभिव्यक्ति झूठी होगी केवल अगर यह वापस आता है nil या false, अन्यथा यह सत्य है।

तो, आपके मामले में लौट रहा है, ActiveRecord :: हठ #save रिटर्न true यदि रिकॉर्ड सफलतापूर्वक सहेजा गया है, अन्यथा false.


जवाब के लिए 2 № 3

रूबी में if एक अभिव्यक्ति है (सब कुछ एक अभिव्यक्ति है) जो सही या गलत है। और किसी भी अन्य भाषा की तरह सामग्री if या else या elsif ब्लॉक चलाए जाते हैं।

जब आप एक अभिव्यक्ति को समर्पित करते हैं जिसके साइड इफेक्ट होते हैं (जैसे डेटाबेस में रिकॉर्ड को सहेजना) तो साइड इफेक्ट बेशक लागू होते हैं! यह अधिकांश प्रोग्रामिंग भाषाओं पर लागू होता है।

def foo
print "Hello "
true
end

if foo
print "world!"
end

उत्तर के लिए 1 № 4

रूबी में (और कई अन्य भाषाओं में) if बयान परीक्षण हालत। लेकिन हालत का परीक्षण करने के लिए इसे उस स्थिति में कोड का मूल्यांकन करना होगा यानी इसे निष्पादित करना होगा।

तो यह वहाँ कैसे कर रहा है। if कथन निष्पादित करता है @record.save, save विधि को बचाने की कोशिश करता है @record और रिटर्न true अगर यह सफलतापूर्वक किया। यदि यह रिकॉर्ड को वापस नहीं बचा सकता है false.

फिर if परिणाम की जाँच करता है (true या false)। @record उस समय तक बचत पहले से ही की जाती है।


जवाब के लिए 0 № 5

यहाँ @record.save रिकॉर्ड को बचाएगा और यह वापस आ जाएगा true या false

और उस मूल्य का मूल्यांकन किया जाएगा if

जब आप कुछ क्रिया करना चाहते हैं तो आम तौर पर आप इसका इस्तेमाल करेंगे success या failure बचाया जा रहा है