my_object.save(false) Haqiqatan ham Faol Yozuv tekshiruvlarini o'tkazib yubormaydi

Shunday qilib, men duch kelgan xatoni bartaraf etish uchun sochimni oldim va nihoyat unga nima sabab bo'lganini topdim. Men qo'ng'iroq qilganimda har doim shunday taassurot qoldirdim

@my_model.save(false)

Men ActiveRecord tekshiruvlarinio'tkazib yuboraman. Ma'lum bo'lishicha, bu qisman to'g'ri. Mening obyektlarim ActiveRecord tekshiruvimga qaramay QARAYMAM maʼlumotlar bazasiga saqlanmoqda. Mening muammom bor, chunki mening tekshiruvlarimdan biri tekshirish jarayonida bolalar modellaridan birini o'zgartiradi (Bu 24 soatlik joylashuvni rejalashtirish ilovasidir, shuning uchun tushlik saqlanganida, men ularni saqlagan kun va ertasi kuni tekshiraman. shuningdek, foydalanuvchi tungi smenada "2am" degani emasligiga ishonch hosil qilish uchun.

Mening savolim shu: Haqiqatan ham tekshirishlarni o'tkazib yuborish va to'g'ridan-to'g'ri ma'lumotlar bazasiga o'tishning bir yo'li bormi? Bu oddiy ActiveRecord xatti-harakatimi yoki men tekshiruvlarimga chuqurroq kirishim kerakmi? Yoki omadim yo'qmi va tekshiruvlarimni qayta yozishim kerakmi?


person BushyMark    schedule 29.03.2009    source manba
comment
Shunday qilib, siz tasdiqlash kodi hali ham ishlayotganini aytyapsiz, bu ularning natijasini e'tiborsiz qoldirmoqda va bu sizning tekshirishlaringizdagi modelni o'zgartirganingiz uchun muammo. Ma'lumotlarni tozalash uchun tekshirishlardan boshqa narsadan foydalanardim.   -  person bhollis    schedule 30.03.2009
comment
Aynan shu! O'ylaymanki, bu mening yakuniy javobim, lekin men boshqasini topa olamanmi, deb o'z omadimni sinab ko'raman deb o'yladim.   -  person BushyMark    schedule 30.03.2009
comment
Biznes ob'ektlarini qayta ishlash uchun tekshirishlardan foydalanish, albatta, hiddir. Tasdiqlash ma'lumotlarni o'zgartirish uchun emas, balki tekshirish uchun mo'ljallangan. O'zgartirish uchun ActiveRecord hayot aylanishining turli ilgaklaridan foydalaning: saqlashdan oldin/keyin, yaratishdan oldin/keyin va hokazo.   -  person Matthias    schedule 16.04.2010


Javoblar (4)


Yozuvni ma'lumotlar bazasiga saqlashdan oldin uni validator ichida amalga oshirishga urinishdan ko'ra, yozuv bilan o'zaro aloqa qilish uchun before_create yoki boshqa qayta qo'ng'iroqni ishlatishingiz mumkin.

Mana ActiveRecord qo'ng'iroqlari bo'yicha hujjatlar: http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

Qayta qoʻngʻiroqlardan foydalanish boʻyicha qoʻllanma, ularni oʻtkazib yuborishning baʼzi tafsilotlari bu yerda mavjud: http://guides.rubyonrails.org/activerecord_validations_callbacks.html

person Gdeglin    schedule 29.03.2009

Mening muammom mavjud, chunki mening tekshiruvlarimdan biri tekshirish jarayonida bolalar modellaridan birini o'zgartiradi

Buni tuzating, shunda muammolaringiz yo'qoladi. Tasdiqlash hech qachon ob'ektlarni o'zgartirmasligi kerak!

person Orion Edwards    schedule 29.03.2009

Qabul qilaman, yozuvlar bilan ishlash uchun qayta qo'ng'iroqlardan foydalanishingiz kerak. Tasdiqlash hech qachon ob'ektlarni o'zgartirmasligi kerak.

Agar siz hali ham buni qilish zaruratini topsangiz ... foydalaning

myobject.save_without_validation
person Rishav Rastogi    schedule 30.03.2009

Men Orion bilan roziman, ob'ektni o'zgartirish uchun hech qachon tekshiruvdan foydalanmang, o'rniga after_save kabi qayta qo'ng'iroqdan foydalaning.

person nitecoder    schedule 30.03.2009
comment
Kim buni pastga tushirgan bo'lsa, siz ba'zi narsalarni qayta ko'rib chiqishingiz kerak. Tasdiqlashlar tasdiqlash uchundir. Agar rozi bo'lmasangiz, izoh bering va biz sizning nazariyangiz nima ekanligini bilib olamiz. - person nitecoder; 20.09.2009