2013-07-19 8 views
5
Foo.where(:some_id => 1).update_all(:some_columnn => "1") 

में ऑब्जेक्ट लोड किए बिना कॉलम को अपडेट करने के लिए कैसे यह Foo को अपडेट करने का सही तरीका है? मैं वस्तु को खोजने और अद्यतन नहीं करना चाहता हूं।ActiveRecord

उत्तर

2

हाँ यह सही तरीका है, लेकिन याद रखें, n ओ कॉलबैक या सत्यापन निष्पादित किया जाएगा।

बीटीडब्ल्यू, update_all शर्तों को भी स्वीकार करता है। इस

Foo.update_all({:some_columnn => "1"}, {:some_id => 1}) 
0

यदि आप किसी ऑब्जेक्ट को तुरंत चालू नहीं करना चाहते हैं तो यह सही दृष्टिकोण है, लेकिन ध्यान रखें कि इसका अर्थ यह भी है कि यह आपके किसी भी मॉडल सत्यापन या कॉलबैक नहीं करेगा - यह सीधे SQL अपडेट कमांड पर जाता है।

Further information

0

आप, स्थिति उपयोग कर सकते हैं की update_all

update_all एपीआई के अनुसार (अपडेट, स्थिति = शून्य, विकल्प = {})

तो तुम कर सकते हैं:

Foo.update_all(:some_column => '1', :some_id => 1) 
2

As of Rails 4 की तरह, की स्थिति नहीं रह गया है update_all पद्धति पर आपूर्ति की जाती है, लेकिन इसके बजाय पूर्ववर्ती संग्रह में वर्णित होता है। उदाहरण के लिए,

# updates everything, as usual 
Foo.update_all(some_column: '1') 

# update only the specified rows 
Foo.where(some_id: 1).update_all(some_column: '1')