2011-03-18 11 views
5

मैंने अभी इस तरह के कोड का उपयोग कर कई कस्टम counter_cache s लागू किया है:सहेजने से क्या कवर किया जाता है (: validate => false)?

def after_save 
    self.update_counter_cache 
end 
def after_destroy 
    self.update_counter_cache 
end 
def update_counter_cache 
    self.company.new_matchings_count = Matching.where(:read => false).count 
    self.company.save 
end 

मेरा प्रश्न यह है - Model.save(:validate => false) कमांड वास्तव में validates_with या before_validation जैसी चीज़ों से परे क्यों रोकता है?

यदि मैं अपने मौजूदा सहेजे बिना सत्यापन के रखता हूं तो क्या मेरे कस्टम counter_caches प्रभावित होंगे?

उत्तर

3

यदि आप इसमें प्रवेश करते हैं: validate => false, यह मान्य छोड़ देता है? आदेश। बाकी सब कुछ एक ही काम करता है।

आप कोड की जांच कर सकते यहाँ से बाहर: http://api.rubyonrails.org/classes/ActiveRecord/Validations.html

def save(options={}) 
    perform_validations(options) ? super : false 
end 

... 

if perform_validation 
    valid?(options.is_a?(Hash) ? options[:context] : nil) 
else 
    true 
end 
+0

आप कैसे पास करते हैं: validate => false? मैंने कोशिश की <% = form_for (@blob): validate => false do | f | %> और यह सब कुछ तोड़ दिया। मैं एक नौसिखिया का थोड़ा सा हूँ ... – Leahcim

+0

@ माइकल जो आपके नियंत्रक के अद्यतन/निर्माण विधि में है ... '@ model.save (: validate => false)' –

+0

o.k., धन्यवाद – Leahcim

1

परीक्षण ऑन रेल्स 4.2.6 पता चलता है कि वास्तव में .save(:validate=>false)before_validations और after_validation कॉलबैक को छोड़ देगा।