मैं सक्रिय रिकॉर्ड कॉलबैक को समझने की कोशिश कर रहा हूं, लेकिन वे काम नहीं करते हैं, जैसा कि मैं चाहता हूं।मैं इसे सहेजने से पहले ActiveRecord ऑब्जेक्ट में विशेषताओं को कैसे सेट करूं?
उदा।
मॉडल
Checklist<ActiveRecord...
attr_accessible :item1, :item2, :done # they are all boolean
before_save :check_done
private
def check_done
if item1 && item2
write_attribute :done, true
else
write_attribute :done, false
end
end
अगर मैं कंसोल में एक वस्तु का दृष्टांत यह काम नहीं करता है और यह को बचाने की कोशिश, आपरेशन बचाने रिटर्न "गलत" :(
क्या इस कोड के साथ गलत क्या है? अग्रिम :) में धन्यवाद
संपादित करें: ऐसा लगता है कि वहाँ कुछ "before_save" कॉल के साथ कुछ गलत है की तरह, अगर मैं "after_save" का उपयोग, कोड काम करता है ... लेकिन विशेषता सहेजा नहीं गया है (जाहिर है)। यह वास्तव में अजीब
संपादित 2 अजीब ... विकास लॉग इस
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
[0m
[1m[35mChecklist Load (0.2ms)[0m SELECT "checklists".* FROM "checklists" ORDER BY checklists.id DESC LIMIT 1
WARNING: Can't mass-assign protected attributes: id
से पता चलता लेकिन वह वास्तव में अजीब है, क्योंकि अगर मैं attr_accessible लाइन को हटाने मैं अभी भी इस त्रुटि मिलती है है ...
संपादित 3 किसी को पूछता है, हाँ मैं एक मौजूदा रिकॉर्ड को अपडेट करने की कोशिश कर रहा हूँ।
संपादित 4 हाँ, मैं संपादित करने के लिए अगर मैं कंसोल में टाइप
c.save => # false
c.errors => #<OrderedHash {}>
तुम क्यों मतलब है द्वारा यह काम नहीं करता, त्रुटियों क्या हैं? आप yourobject.save – Mike
ओह के बाद yourobject.errors को कॉल करके जांच सकते हैं, ठीक है मुझे यह myobject.errors # –
tabaluga
'myobject.errors.inspect'' के बारे में कैसे मिलता है ?? – PeterWong